我有一个包含以下内容的numpy数组:
[1, 2, 3]
我想创建一个包含以下内容的数组:[1, 2, 3, 1]
也就是说,我想把数组的第一个元素添加到末尾。
我已经尝试了显而易见的方法:
np.concatenate((a, a[0]))
但是我得到了一个错误,错误提示为ValueError:arrays必须具有相同数量的维度
我不理解这个错误 - 这两个数组都只是1d数组。
append()
方法创建一个新的数组,该数组可以是旧数组加上被附加元素后的结果。
我认为使用适当的方法添加元素更为常规:
a = numpy.append(a, a[0])
a
的内容,但会返回一个新的已修改数组。因此,如果需要修改 a
数组,则必须使用 a = numpy.append(a, a[0])
。 - Amjadnp.append
使用 np.concatenate
。它只是确保添加的数组具有一个维度。OP 的错误在于 a[0]
没有任何维度。 - hpaulja.append(1)
,a.add(1)
,甚至类似列表的 a + [1]
,那就更好了。 - Fernando Wittmann当仅需要添加一次或偶尔添加时,使用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)
试试这个:
np.concatenate((a, np.array([a[0]])))
http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html
连接需要两个元素都是numpy数组;然而,a[0]不是一个数组。这就是为什么它不起作用的原因。
np.concatenate((a, [a[0]]))
。该列表将自动升级为数组类型,无需手动输入,从而节省您的时间。 - Mad Physicist这个命令,
numpy.append(a, a[0])
不会改变a
数组,但是它会返回一个新的修改后的数组。
因此,如果需要修改a
,则必须使用以下内容。
a = numpy.append(a, a[0])
a[0]
不是数组,它是 a
的第一个元素,因此没有维度。
尝试使用 a[0:1]
,它将返回 a
的第一个元素,放在一个单独的数组内。
t = np.array([2, 3])
t = np.append(t, [4])
如果您想添加一个元素,请使用append()
在这种情况下,a = numpy.append(a, 1)
将1添加到数组的末尾
如果您想插入一个元素,请使用insert()
在这种情况下,a = numpy.insert(a, index, 1)
您可以使用索引设置元素在数组中的位置,从而将1放置在所需的位置。
可能有点过头了,但我总是使用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]
。np.append(a,1)
这里的1是一个整数,它可能是一个字符串,也可能不属于数组中的元素。输出:[1,2,3,1]
np.insert([1,2,3], 3, 1)
- Sparkler