我在Windows上使用Python 3.6.2和numpy。
我有两个数组,
整数数组[I1,I2,I3,I4]
浮点值数组[VI1,VI2,VI3,Vi4]
数组的长度相同
第一个数组中的整数可以重复
第二个数组中的值与第一个数组中相同位置的整数相关联。
对于第一个数组中的每个唯一整数,我需要在第一个数组中找到该整数的所有出现次数,然后计算第二个数组中相应位置的所有值的平均值。
给定索引数组[1,5,7,5,9,7,4]
和值数组[9,4,8,7,2,8,6]
1,9和4在索引数组中出现一次,并与值9,2和6相关联,这些值也是这些索引的平均值。
5在索引数组中出现两次,关联值为4和7 - avg 5.5 7在索引数组中出现两次,关联值为8和8 - avg 8.0
阵列可能非常大 - 高达1亿。
当然,这很容易暴力,但是在Python / numpy中有一种快速且内存有效的方法来实现这一点吗?
提前致谢,
道格
答案 0 :(得分:2)
您可以使用numpy searchFilter.LogicalOperator = FilterLogicalOperator.[Or]
和ufuncs
:
np.bincount
编辑:正如@Divakar所指出的,你可以做到
s = np.zeros(i.max())
np.add.at(s, v, i)
c = np.bincount(i)
idx = np.nonzero(c)
out = s[idx] / c[idx]
答案 1 :(得分:0)
一个非常简单的解决方案就是使用Pandas,看看它的扩展程度
import numpy as np
import pandas as pd
i = np.array([1, 5, 7, 5, 9, 7, 4])
v = np.array([9, 4, 8, 7, 2, 8, 6])
d = pd.DataFrame({'i': i, 'v': v})
d = d.groupby('i').mean()
给出了
v
i
1 9.0
4 6.0
5 5.5
7 8.0
9 2.0