rob*_*ntw 93 python arrays numpy
我有一个numpy数组包含:
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我想创建一个包含以下内容的数组:
[1, 2, 3, 1]
Run Code Online (Sandbox Code Playgroud)
也就是说,我想将第一个元素添加到数组的末尾.
我试过了明显的事:
np.concatenate((a, a[0]))
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误说 ValueError: arrays must have same number of dimensions
我不明白这一点 - 数组都只是1d数组.
ste*_*ert 136
append() 创建一个新数组,该数组可以是带有附加元素的旧数组.
我认为使用适当的方法添加元素更为正常:
a = numpy.append(a, a[0])
Run Code Online (Sandbox Code Playgroud)
Jur*_*dom 11
如果每次只追加一次或一次,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)
Run Code Online (Sandbox Code Playgroud)
之后使用python list转换为数组:
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)
Run Code Online (Sandbox Code Playgroud)
预分配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)
Run Code Online (Sandbox Code Playgroud)
当最终大小未知时,预分配很困难,我尝试预先分配50块,但它并没有接近使用列表.
85.1 ms ± 561 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
Run Code Online (Sandbox Code Playgroud)
试试这个:
np.concatenate((a, np.array([a[0]])))
Run Code Online (Sandbox Code Playgroud)
http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html
concatenate需要两个元素都是numpy数组; 但是,[0]不是数组.这就是为什么它不起作用.
这个命令,
numpy.append(a, a[0])
不会改变a阵列.但是,它返回一个新的修改过的数组.所以,如果a需要修改那么
a = numpy.append(a,a[0])
必须使用.
小智 7
如果你想添加一个元素使用append()
a = numpy.append(a, 1)在本例中,在数组末尾添加 1
如果你想插入一个元素使用insert()
a = numpy.insert(a, index, 1)在这种情况下,您可以将 1 放在您想要的位置,使用索引设置数组中的位置。
| 归档时间: |
|
| 查看次数: |
219671 次 |
| 最近记录: |