将单个元素添加到numpy中的数组


122

我有一个numpy数组,其中包含:

[1, 2, 3]

我想创建一个包含以下内容的数组:

[1, 2, 3, 1]

也就是说,我想将第一个元素添加到数组的末尾。

我尝试了明显的方法:

np.concatenate((a, a[0]))

但是我说错了 ValueError: arrays must have same number of dimensions

我不明白这一点-数组都是一维数组。


1
np.insert([1,2,3], 3, 1)
Sparkler

Answers:


163

append() 创建一个新数组,该数组可以是带有附加元素的旧数组。

我认为使用适当的方法添加元素更为正常:

a = numpy.append(a, a[0])

29
此命令不会更改a阵列。但是,它返回一个新的修改后的数组。因此,如果a 需要修改,则a = numpy.append(a,a[0])必须使用。
Amjad

np.append使用np.concatenate。只需确保插件具有一维即可。OP错误是a[0]尺寸为0。
hpaulj

如果我只想添加一个元素,为什么append会创建一个全新的数组?
ed22

我不喜欢这样一个简单的命令,我们需要调用另一个函数。如果数组本身中有一个内部方法a.append(1)a.add(1)或者甚至类似于列表的某种内部方法,那就更好了a + [1]
Fernando Wittmann

17

如果仅一次或一次附加一次,则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)

14

a[0]不是数组,它是的第一个元素,a因此没有尺寸。

尝试a[0:1]改用,这将返回a单个项目数组内的第一个元素。



10

这个命令

numpy.append(a, a[0])

不会改变a数组。但是,它返回一个新的修改后的数组。因此,如果a需要修改,则必须使用以下内容。

a = numpy.append(a, a[0])


3

这可能有点矫kill过正,但是我始终将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])

2

假设a=[1,2,3]您希望它成为[1,2,3,1]

您可以使用内置的附加功能

np.append(a,1)

这里1是一个整数,它可以是字符串,并且可以属于或不属于数组中的元素。印刷品:[1,2,3,1]


欢迎来到StackOverflow!您可能想阅读本指南,了解如何设置代码格式,然后更新答案,使其更具可读性:)这也是一个非常老的问题,答案已被接受,最好回答一些新问题
0mpurdy

0

如果要添加元素,请使用 append()

a = numpy.append(a, 1) 在这种情况下,在数组末尾添加1

如果要插入元素,请使用 insert()

a = numpy.insert(a, index, 1) 在这种情况下,您可以将1放置在所需的位置,并使用index设置数组中的位置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.