我有一个复杂数字的numpy数组。所以我想在数组的起始位置插入零,并将数组的其余部分向前移一位。
python,numpy;如何在数组的起始处插入元素
例如:
a = [1 + 2j, 5 + 7j,..]
我要打:
a = [0 + 0j, 1 + 2j, 5 + 7j,..]
什么是最简单的方法是什么?
我有一个复杂数字的numpy数组。所以我想在数组的起始位置插入零,并将数组的其余部分向前移一位。
python,numpy;如何在数组的起始处插入元素
例如:
a = [1 + 2j, 5 + 7j,..]
我要打:
a = [0 + 0j, 1 + 2j, 5 + 7j,..]
什么是最简单的方法是什么?
最简单的方法:
a = np.array([1 + 2j, 5 + 7j])
a = np.insert(a, 0, 0)
然后:
>>> a
array([ 0.+0.j, 1.+2.j, 5.+7.j])
注意,这将创建一个新的阵列,它实际上并没有插入0
到原来的数组。
有几种替代np.insert
,所有这些也创建一个新的数组:
In [377]: a
Out[377]: array([ 1.+2.j, 5.+7.j])
In [378]: np.r_[0, a]
Out[378]: array([ 0.+0.j, 1.+2.j, 5.+7.j])
In [379]: np.append(0, a)
Out[379]: array([ 0.+0.j, 1.+2.j, 5.+7.j])
In [380]: np.concatenate([[0], a])
Out[380]: array([ 0.+0.j, 1.+2.j, 5.+7.j])
In [381]: np.hstack([0, a])
Out[381]: array([ 0.+0.j, 1.+2.j, 5.+7.j])
In [382]: np.insert(a, 0, 0)
Out[382]: array([ 0.+0.j, 1.+2.j, 5.+7.j])
另一种方法是“水平堆叠”(也创建新的数组):
np.hstack((0,a))
另外,如果你有一个n维数组,你需要指定轴,否则它会变平:
np.insert(my_array, 0, myvalue, axis=1)
此外,如果您想要添加n个具有零值的行数。你可以创建一个零数组,并使用hstack:
zero_array = np.zeros([n])
new = np.hstack([zero_array,old_array])
我计时所有五个不同的方法在数组开头插入一个元素。下面是结果:
In [20]: %timeit np.hstack([1, [1, 2, 3]])
10000 loops, best of 3: 30.4 µs per loop
In [21]: %timeit np.insert([1, 2, 3], 0, 1)
10000 loops, best of 3: 46.6 µs per loop
In [22]: %timeit np.r_[[1], [1, 2, 3]]
10000 loops, best of 3: 32.8 µs per loop
In [28]: %timeit np.append(1, [1, 2, 3])
10000 loops, best of 3: 23.4 µs per loop
In [29]: %timeit np.concatenate([[1], [1, 2, 3]])
The slowest run took 6.43 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 8.79 µs per loop
这似乎快两倍,插入我的测试100元阵列 – xioxox
我看到下列错误:ValueError异常:所有输入数组必须具有相同的维数 – lacrima
@Iacrima你'了'的数组可能> = 2个维度.....使用'a.ndim'来检查'a.shape' – atomh33ls