在 numpy 中为数组添加单个元素

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

[1, 2, 3]

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

[1, 2, 3, 1]

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

我已经试过了显而易见的方法:

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

但是我在说 ValueError: arrays must have same number of dimensions的时候出错了

我不明白,这两个数组都是1d 数组。

469146 次浏览

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

尝试使用 a[0:1],它将返回单个条目数组中 a的第一个元素。

试试这个:

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

Http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html

Concatenate 需要两个元素都是 numpy 数组; 但是,[0]不是数组。这就是它不起作用的原因。

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

我认为使用正确的方法添加一个元素更为正常:

a = numpy.append(a, a[0])
t = np.array([2, 3])
t = np.append(t, [4])

这可能有点夸张,但我总是使用 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])

假设它是 a=[1,2,3],你希望它是 [1,2,3,1]

您可以使用内置的 append 函数

np.append(a,1)

这里1是一个 int,它可能是一个字符串,它可能属于数组中的元素,也可能不属于数组中的元素。指纹: [1,2,3,1]

这个命令,

numpy.append(a, a[0])

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

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

如果只是偶尔附加一次或一次,那么在数组中使用 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 list 转换为 array:

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)

预分配数字数组:

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)

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

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

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

在这种情况下,您可以使用索引设置数组中的位置,将1放在您希望的位置。