【问题标题】:Insert elements to beginning and end of numpy array将元素插入到numpy数组的开头和结尾
【发布时间】:2015-09-29 01:59: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 我刚刚运行了一些时间,并且无论数组长度如何,连接始终比 ​​hstack 快约 3 倍。有没有其他人发现类似的结果?
  • @J.Corson 是的,这是预期的,并且遵循与this solution中讨论的相同模式
  • @Divakar 谢谢!我没看过那个帖子。
  • insertappend,甚至hstack都使用np.concatenate

标签: python arrays numpy


【解决方案1】:

另一种方法是使用 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,因此我将选择直接指向源的答案。谢谢大家!
【解决方案2】:

你可以使用np.concatenate -

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

【讨论】:

    【解决方案3】:

    您可以将索引列表传递给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])
    

    【讨论】:

    • @J.Corson No -1 在这种情况下不起作用,它将在 564 之前插入 77
    • >>> np.insert(a,[0,-1],[88,77]) array([ 88, 2, 56, 4, 8, 77, 564])
    • 好电话。完全忘记了。
    • 免责声明:我没有进行任何基准测试。在性能方面,如果 np.array 像普通的 Python 列表一样工作,这可能是最糟糕的,因为我们必须将 x 移动次数,其中 x 是我们将添加到数组中的项目数。
    • @ozgur 是的,如果我们要处理更长的列表,这对于这个任务来说不是一种有效的方式,但是对于多个任务来说它更灵活,并且在小数组中表现得很好!
    【解决方案4】:

    怎么样:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-07
      • 2022-11-03
      • 1970-01-01
      • 2017-03-03
      • 2014-11-15
      • 2022-01-25
      • 1970-01-01
      • 2018-11-25
      相关资源
      最近更新 更多