我有一个数组的numpy数组,例如:
x = np.array([[1,2,3],[10,20,30]])
现在假设我想用[4,40]扩展每个数组,以生成以下结果数组:
[[1,2,3,4],[10,20,30,40]]
如果不复制整个数组,我怎么能做到这一点呢?我试图改变数组的形状,但它抛出了一个ValueError:
x[0] = np.append(x[0],4)
x[1] = np.append(x[1],40)
ValueError : could not broadcast input array from shape (4) into shape (3)
3条答案
按热度按时间vktxenjb1#
你不能这么做。如果可能的话,Numpy数组会分配连续的内存块。任何对数组大小的改变都会强制整个数组的低效复制。如果可能的话,你应该使用Python列表来增长你的结构,然后将最终结果转换回数组。
然而,如果你知道结果数组的最终大小,你可以用类似
np.empty()
的东西示例化它,然后通过索引赋值,而不是追加。这不会改变数组本身的大小,只是重新赋值,所以应该不需要复制。9avjhtql2#
虽然@roganjosh说得对,如果不(在底层进程中)复制一个numpy数组,就不能修改numpy数组,但是有一种更简单的方法,可以将ndarray的每个值附加到2d ndarray中每个numpy数组的末尾,方法是使用numpy.column_stack
rbl8hiat3#
1.创建新矩阵
1.插入旧矩阵的值
1.然后,在最后的位置插入新值
或者改用np.reshape()或np.resize()