Python 巨蟒;如何在数组开头插入元素

Python 巨蟒;如何在数组开头插入元素,python,arrays,numpy,Python,Arrays,Numpy,我有一个复数的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) 然后: 请注意,这会创建一个新数组,但实际上不会将0插入原始数组 有几种替代方案,所有这些都会创建一个新阵列: In [3

我有一个复数的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)
然后:

请注意,这会创建一个新数组,但实际上不会将
0
插入原始数组

有几种替代方案,所有这些都会创建一个新阵列:

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

对于我的test 100元素数组,这似乎是insert的两倍。我看到以下错误:ValueError:所有输入数组必须具有相同数量的dimensions@Iacrima您的
数组可能>=2维。。。。。使用
a.ndim
进行
a.shape
检查
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