我有一个如下形式的numpy数组:
['viola.jpg' '0.81' '1.0693461723' '100']
['viola.jpg' '0.44' '1.31469086921' '18']
['viola.jpg' '0.8' '3.92096084523' '73']
['vlasta.jpg' '0.88' '1.36559123399' '110']
['vlasta.jpg' '0.88' '1.88126493001' '45']
['vlasta.jpg' '0.76' '1.0510328514' '88']
我想为第0列中的每个新标识符平均第1列和第2列中的值。从上面我想得到一些东西,比如:
^{pr2}$(最后一列与此完全无关,它可以是数字的平均值,也可以是其中的一个随机值,也可以完全忽略不计)
我曾经尝试过这样做,但是失败了,因为reduceat不喜欢灵活的类型(上面的数组是“pics”)
pics = pics[pics[:,0].argsort()]
print pics
last = pics[:,0]
w = np.where(last[:-1] != last[1:])[0] + 1
w = np.concatenate(([0], w, [len(pics)])) #add 0 and last value
print type(pics), type(w)
means = np.add.reduceat(pics, w[:-1])/np.diff(w)[:,None]
您可以使用熊猫快速完成此操作:
结果:
^{pr2}$我不知道您是从哪里得到这个字符串列表的,但是如果它来自一个文件,请使用
genfromtxt
从中获得一个漂亮的numpy数组,其类型正确:现在,
^{pr2}$a
是一个结构化数组。您可以使用field
名称访问列::(也许没那么好。。。很抱歉夸大其词。但是,向您介绍结构化数组是值得的。现在,看看
b
:根据你在问题中的出发点,你可以这样做:
如果使用更好的数据结构,那么跟踪}的数据结构就容易得多。如需证明,请参阅@HYRY的答案。在
float
、int
、和{相关问题 更多 >
编程相关推荐