gpt4 book ai didi

python - Numpy:为什么 (2,1) 数组和垂直矩阵切片的差异不是 (2,1) 数组

转载 作者:行者123 更新时间:2023-12-01 03:40:13 25 4
gpt4 key购买 nike

考虑以下代码:

>>x=np.array([1,3]).reshape(2,1)
array([[1],
[3]])
>>M=np.array([[1,2],[3,4]])
array([[1, 2],
[3, 4]])
>>y=M[:,0]
>>x-y
array([[ 0, 2],
[-2, 0]])

我直觉地认为这应该给出一个由零组成的 (2,1) 向量。

但是,我并不是说应该这样做,其他一切都是愚蠢的。如果有人能够提供一些我能记住的逻辑,我会很高兴,这样这样的事情就不会在我的代码中不断产生错误。

请注意,我并不是在问如何实现我想要的(我可以 reshape y),但我希望更深入地了解 Python/Numpy 为何如此工作。也许我在概念上做错了什么?

最佳答案

numpy.array 索引使得任何位置的单个值都会折叠该维度,而切片则保留它,即使切片只有一个元素宽。对于任何数量的维度,这都是完全一致的:

>> A = numpy.arange(27).reshape(3, 3, 3)
>> A[0, 0, 0].shape
()

>> A[:, 0, 0].shape
(3,)

>> A[:, :, 0].shape
(3, 3)

>> A[:1, :1, :1].shape
(1, 1, 1)

请注意,每次使用单个数字时,该维度都会被删除。

您可以使用numpy.matrix获得您期望的语义,其中两个单个索引返回一个0阶数组,而所有其他类型的索引返回矩阵

>> M = numpy.asmatrix(numpy.arange(9).reshape(3, 3))

>> M[0, 0].shape
()

>> M[:, 0].shape # This is different from the array
(3, 1)

>> M[:1, :1].shape
(1, 1)

当您使用numpy.matrix时,您的示例将按照您的预期工作:

>> x = numpy.matrix([[1],[3]])
>> M = numpy.matrix([[1,2],[3,4]])
>> y = M[:, 0]
>> x - y
matrix([[0],
[0]])

关于python - Numpy:为什么 (2,1) 数组和垂直矩阵切片的差异不是 (2,1) 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39706277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com