如何将项目添加到一个数字数组

我需要完成以下任务:

来自:

a = array([[1,3,4],[1,2,3]...[1,2,1]])

(向每行添加一个元素)到:

a = array([[1,3,4,x],[1,2,3,x]...[1,2,1,x]])

我尝试过像[ n ] = array ([1,3,4,x ])这样的操作

但是麻木不仁抱怨形状不匹配。我尝试遍历 a并将元素 x 附加到每个项,但是没有反映这些更改。

你知道我该怎么做吗?

217557 次浏览
import numpy as np
a = np.array([[1,3,4],[1,2,3],[1,2,1]])
b = np.array([10,20,30])
c = np.hstack((a, np.atleast_2d(b).T))

返回 c:

array([[ 1,  3,  4, 10],
[ 1,  2,  3, 20],
[ 1,  2,  1, 30]])

一种方法(可能不是最好的方法)是使用新元素创建另一个数组并执行 column _ stack。也就是说。

>>>a = array([[1,3,4],[1,2,3]...[1,2,1]])
[[1 3 4]
[1 2 3]
[1 2 1]]


>>>b = array([1,2,3])
>>>column_stack((a,b))
array([[1, 3, 4, 1],
[1, 2, 3, 2],
[1, 2, 1, 3]])

如果 x只是一个标量值,您可以尝试这样做,以确保正在追加/连接到 a最右侧列的数组的正确形状:

import numpy as np
a = np.array([[1,3,4],[1,2,3],[1,2,1]])
x = 10
b = np.hstack((a,x*np.ones((a.shape[0],1))))

返回 b如下:

array([[  1.,   3.,   4.,  10.],
[  1.,   2.,   3.,  10.],
[  1.,   2.,   1.,  10.]])

对于任何具有 Python 经验的人来说,将数据附加到现有数组是一件很自然的事情。但是,如果您发现自己经常附加到大型数组中,您将很快发现 NumPy 不能像 python list那样轻松或有效地完成这项工作。您会发现,每个“追加”操作都需要重新分配数组内存,并且短期内存需求翻倍。因此,解决这个问题的更一般的方法是尝试分配与算法的最终输出一样大的数组。然后对该数组的子集(切片)执行所有操作。理想情况下,应尽量减少数组的创建和销毁。

也就是说,这通常是不可避免的,这样做的功能是:

用于2-D 数组:

对于3-D 数组(以上加号) :

对于 N-D 阵列:

通过将标量扩展为 python-list 类型,可以更容易地追加一个标量(而且不需要转换为 float) ,如下所示:

import numpy as np
a = np.array([[1,3,4],[1,2,3],[1,2,1]])
x = 10


b = np.hstack ((a, [[x]] * len (a) ))

返回 b如下:

array([[ 1,  3,  4, 10],
[ 1,  2,  3, 10],
[ 1,  2,  1, 10]])

可以通过以下方法追加一行:

c = np.vstack ((a, [x] * len (a[0]) ))

返回 c如下:

array([[ 1,  3,  4],
[ 1,  2,  3],
[ 1,  2,  1],
[10, 10, 10]])
target = []


for line in a.tolist():
new_line = line.append(X)
target.append(new_line)


return array(target)

还可以使用 np.insert

import numpy as np
a = np.array([[1, 3, 4],
[1, 2, 3],
[1, 2, 1]])
x = 5
index = 3 # the position for x to be inserted before
np.insert(a, index, x, axis=1)
array([[1, 3, 4, 5],
[1, 2, 3, 5],
[1, 2, 1, 5]])

index也可以是 list/tuple

>>> index = [1, 1, 3] # equivalently (1, 1, 3)
>>> np.insert(a, index, x, axis=1)
array([[1, 5, 5, 3, 4, 5],
[1, 5, 5, 2, 3, 5],
[1, 5, 5, 2, 1, 5]])

或者 slice

>>> index = slice(0, 3)
>>> np.insert(a, index, x, axis=1)
array([[5, 1, 5, 3, 5, 4],
[5, 1, 5, 2, 5, 3],
[5, 1, 5, 2, 5, 1]])