繁体   English   中英

有没有办法矢量化将平均 function 应用于 ndarray 中的屏蔽区域?

[英]Is there a way to vectorize applying the mean function to masked regions in an ndarray?

假设我有两个 ndarray 定义如下:

import numpy as np
mask = np.array([[1,1],[1,2]])
values = np.array([[1., 3.],[2., 2.]])

我的目标是根据掩码中的 integer 指示的mask区域计算值的平均值。 自然,我会使用 for 循环:

out = np.zeros(len(np.unique(mask)))
for j,i in enumerate(np.unique(mask)):
  out[j] = np.nanmean(values[mask==i])

但是,对于大型多维 arrays,此序列化解决方案变得非常缓慢。 有没有办法有效地矢量化这个操作? 提前谢谢你的帮助!

您可以使用np.bincount

unq,inv,cnt = np.unique(mask,return_inverse=1,return_counts=1)
np.bincount(inv,values.ravel())/cnt
# array([2., 2.])

暂无
暂无

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

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