在numpy中将单个元素添加到数组
Posted
技术标签:
【中文标题】在numpy中将单个元素添加到数组【英文标题】:Add single element to array in numpy 【发布时间】:2011-11-12 01:38:17 【问题描述】:我有一个 numpy 数组,其中包含:
[1, 2, 3]
我想创建一个数组,其中包含:
[1, 2, 3, 1]
也就是说,我想将第一个元素添加到数组的末尾。
我已经尝试了明显的:
np.concatenate((a, a[0]))
但我收到一条错误消息,提示 ValueError: arrays must have same number of dimensions
我不明白 - 数组都只是一维数组。
【问题讨论】:
np.insert([1,2,3], 3, 1)
【参考方案1】:
a[0]
不是数组,它是a
的第一个元素,因此没有维度。
尝试改用a[0:1]
,这将返回单个项目数组中a
的第一个元素。
【讨论】:
【参考方案2】:试试这个:
np.concatenate((a, np.array([a[0]])))
http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html
concatenate 需要两个元素都是 numpy 数组;但是, a[0] 不是数组。这就是它不起作用的原因。
【讨论】:
或者,更简单的np.concatenate((a, [a[0]]))
。无论如何,列表都会自动升级为数组类型,从而节省您的输入时间。【参考方案3】:
append()
创建一个新数组,该数组可以是带有附加元素的旧数组。
我认为使用正确的方法添加元素更正常:
a = numpy.append(a, a[0])
【讨论】:
此命令不会改变a
数组。但是,它返回一个新的修改数组。因此,如果需要修改a
,则必须使用a = numpy.append(a,a[0])
。
np.append
使用np.concatenate
。它只是确保插件具有一维。 OP 错误是 a[0]
有 0 个维度。
如果我只想添加一个元素,为什么 append 会创建一个全新的数组?
我不喜欢这样一个简单的命令需要调用另一个函数的事实。如果数组本身有一个内部方法会更好,比如a.append(1)
、a.add(1)
,或者甚至类似于a + [1]
这样的列表【参考方案4】:
t = np.array([2, 3])
t = np.append(t, [4])
【讨论】:
【参考方案5】:这可能有点矫枉过正,但我总是将np.take
函数用于任何环绕索引:
>>> a = np.array([1, 2, 3])
>>> np.take(a, range(0, len(a)+1), mode='wrap')
array([1, 2, 3, 1])
>>> np.take(a, range(-1, len(a)+1), mode='wrap')
array([3, 1, 2, 3, 1])
【讨论】:
【参考方案6】:假设a=[1,2,3]
,您希望它是[1,2,3,1]
。
您可以使用内置的追加功能
np.append(a,1)
这里的 1 是一个 int,它可能是一个字符串,它可能属于也可能不属于数组中的元素。打印:[1,2,3,1]
【讨论】:
欢迎来到 ***!您可能想阅读 this guide 以了解如何格式化代码,然后更新您的答案以使其更具可读性:) 这也是一个非常古老的问题,答案已被接受,最好回答一些新问题【参考方案7】:这个命令,
numpy.append(a, a[0])
不改变a
数组。但是,它返回一个新的修改数组。
所以,如果需要修改a
,那么就必须使用下面的。
a = numpy.append(a, a[0])
【讨论】:
【参考方案8】:当只添加一次或一次又一次时,在您的数组上使用np.append
应该没问题。这种方法的缺点是每次调用时都会为一个全新的数组分配内存。当为大量样本增长数组时,最好预先分配数组(如果总大小已知)或附加到列表并随后转换为数组。
使用np.append
:
b = np.array([0])
for k in range(int(10e4)):
b = np.append(b, k)
1.2 s ± 16.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
之后使用python列表转换为数组:
d = [0]
for k in range(int(10e4)):
d.append(k)
f = np.array(d)
13.5 ms ± 277 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
预分配numpy数组:
e = np.zeros((n,))
for k in range(n):
e[k] = k
9.92 ms ± 752 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
当最终大小未知时,预分配很困难,我尝试以 50 个块为单位进行预分配,但与使用列表相差无几。
85.1 ms ± 561 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
【讨论】:
【参考方案9】:如果要添加元素,请使用append()
a = numpy.append(a, 1)
在这种情况下在数组末尾添加 1
如果你想插入一个元素,请使用insert()
a = numpy.insert(a, index, 1)
在这种情况下,您可以将 1 放在您想要的位置,使用索引来设置数组中的位置。
【讨论】:
以上是关于在numpy中将单个元素添加到数组的主要内容,如果未能解决你的问题,请参考以下文章