将元素前置到numpy数组

时间:2016-05-03 07:33:14

标签: python numpy insert

我有以下numpy数组

import numpy as np

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

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

X = X.insert(X, 0)

如何插入X?

4 个答案:

答案 0 :(得分:37)

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

你想在这种情况下使用它,如下所示:

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

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

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

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

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

答案 1 :(得分:5)

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

我的发现:

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

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

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

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

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

答案 2 :(得分:2)

您可以尝试以下

data.table

不要在现有的X上插入6,而是在X后面附加6。

因此,第一个参数library(data.table) df1_melted <- melt(setDT(df1), id.vars = "Winner", value.name = "Country") df2b <- df1_melted[, .(Matches = .N, Win = sum(Winner == Country), Loss = sum(Winner != Country & Winner != "no result"), Draw = sum(Winner == "no result")), by = Country] df2b Country Matches Win Loss Draw 1: New Zealand 2 1 0 1 2: Afghanistan 3 1 2 0 3: Australia 1 1 0 0 4: Sri Lanka 2 0 1 1 5: Zimbabwe 3 2 1 0 6: India 1 0 1 0 是标量6的numpy数组,第二个参数是要添加的数组,第三个参数是我们要添加的位置

答案 3 :(得分:1)

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

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

如果需要在第二维度上进行操作,则可以使用np.c _。

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