将元素前置为numpy数组

piR*_*red 33 python numpy insert

我有以下numpy数组

import numpy as np

X = np.array([[5.], [4.], [3.], [2.], [1.]])
Run Code Online (Sandbox Code Playgroud)

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

X = X.insert(X, 0)
Run Code Online (Sandbox Code Playgroud)

我如何插入X?

小智 46

numpy的拥有insert这是通过入店功能np.insert文档.

在这种情况下你会想要使用它:

X = np.insert(X, 0, 6., axis=0)
Run Code Online (Sandbox Code Playgroud)

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

第二个参数0指定了哪里.

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

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


小智 10

我只是写了一些执行此操作的代码〜100,000次,所以我需要找出最快的方法来执行此操作。我无论如何都不是代码效率方面的专家,但是我可以通过%%timeit在jupyter笔记本中使用magic函数来弄清楚一些事情。

我的发现:

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

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

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

np.insert(array,0,number) 这似乎是8倍时最差的选择。

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

  • 惊人的!第一个选项不仅速度更快,而且可以轻松用于插入整个序列...例如,就我而言,我想在开头插入几个零;`aa =np.concatenate(([0]*99, aa))` ...因为我在平滑之前操纵信号,然后找到峰值。 (2认同)

Nod*_*ili 6

您可以尝试以下方法

X = np.append(arr = np.array([[6]]), values = X, axis= 0)
Run Code Online (Sandbox Code Playgroud)

我们不是将 6 插入到现有的 X 中,而是将 6 添加到 X 中。

因此,第一个参数arr是标量 6 的 numpy 数组,第二个参数是要添加的数组,第三个参数是我们要添加的位置