繁体   English   中英

NumPy:计算数组中某些元素的平均值

[英]NumPy: Calculate mean of certain elements in array

假设数组为(1-d),是否可以在不循环的情况下计算给定大小不同的组的平均值? 代替

avgs = [One_d_array[groups[i]].mean() for i in range(len(groups))]

就像是

avgs = np.mean(One_d_array, groups)

基本上我想这样做:

M = np.arange(10000)
np.random.shuffle(M)
M.resize(100,100)
groups = np.random.randint(1, 10, 100)

def means(M, groups):
    means = []
    for i, label in enumerate(groups):
        means.extend([M[i][groups == j].mean() for j in set(p).difference([label])])
    return means

这个在

%timeit means(M, groups)
100 loops, best of 3: 12.2 ms per loop

加快10倍左右已经很不错了

无论您是否看到循环,都存在一个循环。
这是一种方法,但是循环只是隐藏在对map的调用中:

In [10]: import numpy as np

In [11]: groups = [[1,2],[3,4,5]]

In [12]: map(np.mean, groups)
Out[12]: [1.5, 4.0]

另一个隐藏循环是np.vectorize的使用:

>>> x = np.array([1,2,3,4,5])
>>> groups = [[0,1,2], [3,4]]
>>> np.vectorize(lambda group: np.mean(x[group]), otypes=[float])(groups)
array([ 2. , 4.5])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM