蟒蛇 如何在数组的开头插入元素

Hei*_*ich 21 python arrays numpy

我有一个复杂数字的numpy数组.所以我想在数组的开头插入零,并将数组的其余部分向前移动一个位置.

例:

a = [1 + 2j, 5 + 7j,..]
Run Code Online (Sandbox Code Playgroud)

我要实现:

a = [0 + 0j, 1 + 2j, 5 + 7j,..]
Run Code Online (Sandbox Code Playgroud)

最简单的方法是什么?

ask*_*han 29

最简单的方法:

a = np.array([1 + 2j, 5 + 7j])
a = np.insert(a, 0, 0)
Run Code Online (Sandbox Code Playgroud)

然后:

>>> a
array([ 0.+0.j,  1.+2.j,  5.+7.j])
Run Code Online (Sandbox Code Playgroud)

请注意,这会创建一个新数组,它实际上并不会将其插入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])
Run Code Online (Sandbox Code Playgroud)


ato*_*3ls 10

另一种方法是"水平堆栈"(也创建一个新数组):

np.hstack((0,a))
Run Code Online (Sandbox Code Playgroud)

  • 这似乎是我的测试100元素数组的插入速度的两倍 (2认同)