在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中将单个元素添加到数组的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将 2 个本地字符串 [] 添加到单个数组中

如何在 Python 中将对象数组保存到文件中

如何在 Numpy 中将数组展平为矩阵?

如何将 Numpy 数组添加到字典中

在 Numpy Python 中将一维数组附加到二维数组

如何在c ++中的类构造函数中将整个数组初始化为单个元素