我有以下numpy数组
import numpy as np
X = np.array([[5.], [4.], [3.], [2.], [1.]])
我想在开头插入[6.]
。
我试过了:
X = X.insert(X, 0)
如何插入X?
答案 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 _。
我认为这是我能想到的最整洁的版本