我正在寻找一种方法,将一个由x元素组成的1D numpy数组赋给一个形状为(y,z)的2D numpy数组。你知道吗
示例:
A=np.array([[0],[0],[0]])
A[2]=np.array([0,2])
这会导致
A=[[0],[0],[0,2]]
这在使用python列表时非常有效,但是在尝试使用numpy时给我带来了很大的麻烦,通常会导致错误消息:
could not broadcast input array from shape (z) into shape (x)
这似乎是因为numpy复制了所有内容,而不是就地修改数组。我最近才开始使用numpy,如果有人能帮我找到一个有效的方法,我会非常感激。你知道吗
实际上,问题是Numpy拒绝执行隐式复制或重塑。例如:
这里
A[2]
是形状为1的a的子阵列。2个单元格不能放入1,因此我们得到形状错误。相反的情况是可能的,称为广播:在这里,一个标量被广播来更新整个子数组。我们可以调整A的大小以适应shape 2条目:
我们可以看到,调整大小实际上重组了我们的细胞。它仍然以5 5 0开始,但单元格不再沿着单个列。这是因为numpy也不会复制,除非被要求复制;事实上,我们所有的多单元片都引用相同的原始数组。我们可以制作第二个矩阵,然后将原始矩阵复制到一列中:
转置是因为B的切片是1维形状(3长),而不是像a那样的2维形状(1宽3高)。Numpy将一维数组视为水平形状,因此适合3宽1高的矩阵。你可以把它想象成在电子表格中复制一系列单元格。你知道吗
值得注意的是,这样放在B中的数字是A中的数字的副本。这是因为我们对B进行了修改。视图可用于操纵矩阵的各个部分(包括以另一个形状查看它,如transpose()),例如:
相关问题 更多 >
编程相关推荐