在numpy数组的开头和结尾插入元素

25

我有一个numpy数组:

import numpy as np
a = np.array([2, 56, 4, 8, 564])

我想在数组的开头添加一个元素88,并在结尾添加一个元素77

我可以这样做:

a = np.insert(np.append(a, [77]), 0, 88)

为了让a看起来像这样:

array([ 88,   2,  56,   4,   8, 564,  77])

问题:正确的做法是什么?我觉得在np.insert中嵌套np.append很可能不是pythonic的做法。


所以我们已经有了hstackconcatenate作为答案。在实践中,这两者之间是否存在性能差异(例如,如果插入大型数组)? - areuexperienced
1
@areuexperienced,我刚刚进行了一些计时操作,发现无论数组长度如何,连接(concatenate)始终比水平拼接(hstack)快大约三倍。是否还有人发现了类似的结果? - J. Corson
1
@J.Corson 是的,这是预期的,并遵循与此解决方案讨论的相同模式。 - Divakar
@Divakar 谢谢!我还没看到那篇帖子。 - J. Corson
insertappend、甚至 hstack 都使用 np.concatenate - hpaulj
4个回答

34

另一种方法是使用numpy.concatenate。例如:

np.concatenate([[88],a,[77]])

演示 -

In [62]: a = np.array([2, 56, 4, 8, 564])

In [64]: np.concatenate([[88],a,[77]])
Out[64]: array([ 88,   2,  56,   4,   8, 564,  77])

由于显然所有其他选项都使用了np.concatenate,我将选择这个直接到源头的答案。谢谢大家! - Gabriel

8
你可以将索引列表传递给 np.insert
>>> np.insert(a,[0,5],[88,77])
array([ 88,   2,  56,   4,   8, 564,  77])

如果您不知道数组的长度,可以使用array.size指定数组的末尾:

>>> np.insert(a,[0,a.size],[88,77])
array([ 88,   2,  56,   4,   8, 564,  77])

3
@J.Corson 不行,在这种情况下 -1 无效,它会将 77 插入到 564 之前。 - Mazdak
2
>>> np.insert(a,[0,-1],[88,77]) array([ 88, 2, 56, 4, 8, 77, 564]) - Mazdak
好的,没想到那个。 - J. Corson
免责声明:我没有进行任何基准测试。就性能而言,如果np.array像普通的Python列表一样工作,那么这可能是最差的情况,因为我们必须进行x次移位,其中x是我们将添加到数组中的项目数。 - Ozgur Vatansever
@ozgur 是的,如果我们处理的是较长的列表,这种方法可能不是很高效,但对于多个任务来说更加灵活,并且在小数组上表现良好! - Mazdak

7
你可以使用 np.concatenate 函数。
np.concatenate(([88],a,[77]))

5

关于什么:

a = np.hstack([88, a, 77])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接