【发布时间】:2021-02-06 16:16:10
【问题描述】:
我遇到了 NumPy 数组的奇怪行为。我正在研究一些矩阵代数示例,我发现您可以轻松地用各种类型的数据替换数组列(或一行),但不能用具有正确行数和单列数的数组替换。
让我们有一个数组:
>>> import numpy as np
>>>
>>> A = np.zeros([4,4])
>>> A
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
现在让我们为行/列分配一些值:
>>> A[0,:] = [1,1,1,1]
>>> A
array([[1., 1., 1., 1.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
>>>
>>> A[:,0] = np.array([2,2,2,2])
>>> A
array([[2., 1., 1., 1.],
[2., 0., 0., 0.],
[2., 0., 0., 0.],
[2., 0., 0., 0.]])
>>>
>>> A[2,:] = np.array([[3,3,3,3]])
>>> A
array([[2., 1., 1., 1.],
[2., 0., 0., 0.],
[3., 3., 3., 3.],
[2., 0., 0., 0.]])
>>>
>>> A[:,2] = np.array([[4,4,4,4]])
>>> A
array([[2., 1., 4., 1.],
[2., 0., 4., 0.],
[3., 3., 4., 3.],
[2., 0., 4., 0.]])
在最后两次替换中,我将 1x4 数组分配为新行,将 1x4 数组分配为新列。 但由于我不知道的原因,我无法将数组 4x1 分配给现有数组的一列或一行:
>>> A[:,3] = np.array([[5],[5],[5],[5]])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (4,1) into shape (4,)
我用谷歌搜索了这个错误,但我仍然认为这可能是一个设计缺陷。
是否有不允许将Nx1 数组作为列分配给NxM 数组的实际原因?
【问题讨论】:
-
broadcasting的规则你了解多少? -
不是真的,因为我现在似乎发现了这个......
标签: python arrays numpy matrix linear-algebra