向numpy数组中的每个数组追加值

ee7vknir  于 2022-12-04  发布在  其他
关注(0)|答案(3)|浏览(189)

我有一个数组的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)
vktxenjb

vktxenjb1#

你不能这么做。如果可能的话,Numpy数组会分配连续的内存块。任何对数组大小的改变都会强制整个数组的低效复制。如果可能的话,你应该使用Python列表来增长你的结构,然后将最终结果转换回数组。
然而,如果你知道结果数组的最终大小,你可以用类似np.empty()的东西示例化它,然后通过索引赋值,而不是追加。这不会改变数组本身的大小,只是重新赋值,所以应该不需要复制。

9avjhtql

9avjhtql2#

虽然@roganjosh说得对,如果不(在底层进程中)复制一个numpy数组,就不能修改numpy数组,但是有一种更简单的方法,可以将ndarray的每个值附加到2d ndarray中每个numpy数组的末尾,方法是使用numpy.column_stack

x = np.array([[1,2,3],[10,20,30]])
array([[ 1,  2,  3],
       [10, 20, 30]])

stack_y = np.array([4,40])
array([ 4, 40])

numpy.column_stack((x, stack_y))
array([[ 1,  2,  3,  4],
       [10, 20, 30, 40]])
rbl8hiat

rbl8hiat3#

1.创建新矩阵
1.插入旧矩阵的值
1.然后,在最后的位置插入新值

x = np.array([[1,2,3],[10,20,30]])
new_X = np.zeros((2, 4))
new_X[:2,:3] = x 
new_X[0][-1] = 4
new_X[1][-1] = 40
x=new_X

或者改用np.reshape()或np.resize()

相关问题