【问题标题】:Prepend element to numpy array将元素添加到 numpy 数组
【发布时间】:2016-05-03 07:33:14
【问题描述】:

我有以下 numpy 数组

import numpy as np

X = np.array([[5.], [4.], [3.], [2.], [1.]])

我想在开头插入[6.]。 我试过了:

X = X.insert(X, 0)

如何插入到 X 中?

【问题讨论】:

    标签: python numpy insert


    【解决方案1】:

    numpy 有一个 insert 函数,可以通过 np.insertdocumentation 访问。

    在这种情况下,您需要像这样使用它:

    X = np.insert(X, 0, 6., axis=0)
    

    第一个参数X 指定要插入的对象。

    第二个参数0 指定位置。

    第三个参数6. 指定要插入的内容。

    第四个参数axis=0 指定插入应该发生在每列的0 位置。我们可以选择行,但您的 X 是列向量,所以我想我们会保持一致。

    【讨论】:

    • np.insert 将用新值替换对象。我错过了什么吗?
    • 我的编译器可能有问题... np.insert 现在不替换元素...
    • 更多关于axis=0的信息在这里medium.com/@panjeh/…
    【解决方案2】:

    我刚刚编写了一些代码来执行此操作约 100,000 次,因此我需要找出最快的方法来执行此操作。无论如何,我不是代码效率方面的专家,但我可以通过在 jupyter notebook 中使用 %%timeit 魔术函数来解决一些问题。

    我的发现:

    np.concatenate(([number],array)) 需要最少的时间。我们称之为 1x 时间。

    np.asarray([number] + list(array)) 大约 2 倍。

    np.r_[number,array] 约为 4 倍。

    np.insert(array,0,number) 8x 似乎是这里最糟糕的选择。

    我不知道这如何随着array 的大小而变化(我使用了形状 (15,) 数组),并且我建议的大多数选项只有在您想将数字放在开头时才有效。但是,由于这就是问题所要问的,我认为这是进行这些比较的好地方。

    【讨论】:

    • 太棒了!不仅第一个选项更快,而且可以很容易地用于插入整个序列......例如,在我的例子中,我想在乞求处插入几个零; aa =np.concatenate(([0]*99, aa)) ... 因为我在平滑之前操纵信号,然后找到峰值。
    【解决方案3】:

    你可以试试下面的

    X = np.append(arr = np.array([[6]]), values = X, axis= 0)
    

    不是将 6 插入现有的 X,而是将 6 附加到 X。

    所以,第一个参数arr是标量6的numpy数组,第二个参数是你要添加的数组,第三个是我们要添加的地方

    【讨论】:

      【解决方案4】:

      我知道这是一个相当古老的方法,但一个简短的解决方案是使用 numpy 切片技巧:

      np.r_[[[6.]], X]
      

      如果您需要在第二维中执行此操作,可以使用 np.c_。

      我认为这是我能想到的最简洁的版本

      【讨论】:

      • 顺便说一句:你也可以通过简单地颠倒顺序来追加这种方式。
      猜你喜欢
      • 1970-01-01
      • 2019-04-08
      • 2011-11-12
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      相关资源
      最近更新 更多