如何向numpy数组中添加项目
我需要完成以下任务:
从:
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]])
我尝试过像这样做:a[n] = array([1,3,4,x])
但是numpy报错说形状不匹配。我还尝试遍历a
,然后把元素x添加到每个项目上,但这些变化没有反映出来。
有没有什么好的方法可以做到这一点?
7 个回答
8
一种方法(可能不是最好的)是创建一个新的数组,里面放入新的元素,然后使用列堆叠(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]])
13
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))
array([[ 1, 3, 4, 10],
[ 1, 2, 3, 20],
[ 1, 2, 1, 30]])
返回的是 c
:
134
对于有Python经验的人来说,往现有数组里添加数据是很自然的需求。不过,如果你经常要往大数组里添加数据,你会发现NumPy并不像Python的list
那样简单和高效。每次“添加”操作都需要重新分配数组的内存,这会暂时让内存需求翻倍。因此,更好的解决办法是尽量在一开始就分配一个足够大的数组,接近你算法最终需要的输出大小。然后在这个数组的子集(切片)上进行所有操作。理想情况下,应该尽量减少数组的创建和销毁。
当然,有时候这是不可避免的,处理这个问题的函数有:
对于二维数组:
对于三维数组(以上函数加上):
对于N维数组: