我有一个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)
答案 0 :(得分:3)
您不能这样做。如果可能的话,Numpy数组会分配连续的内存块。数组大小的任何更改都将导致整个数组的副本效率低下。如果可能,应该使用Python列表来扩展结构,然后将最终结果转换回数组。
但是,如果您知道结果数组的最终大小,则可以使用np.empty()
之类的实例化它,然后通过索引分配值,而不是附加值。这不会更改数组本身的大小,只会重新分配值,因此不需要复制。
答案 1 :(得分:0)
然后,在最后位置插入新值
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()