python - 有没有一种方法可以将均值函数矢量化到 ndarray 中的屏蔽区域?

标签 python numpy

假设我有两个 ndarray 定义:

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

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

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

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

最佳答案

您可以使用np.bincount:

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

关于python - 有没有一种方法可以将均值函数矢量化到 ndarray 中的屏蔽区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62885793/

相关文章:

python - Tensorflow 是否与 Windows 工作流程兼容?

python - multiprocessing.Pool 挂起如果 child 导致段错误

python - 在 Python 中更改数组索引

python - 如何使用请求指定表单字段和文件类型

python - 如何加入两个 Pandas 数据框中的单元格值?

python - tensorflow 2 : shape mismatch when serialize and decode it back

python - scipy.stats.linregress 中的 for 循环

python - 如何在Python中使锯齿状数组变得整齐?

python - tensorflow 安装正确,但在导入 tensorflow 为 tf 时出现错误 "ImportError: No module named ' _pywrap_tensorflow_internal'

python - Pytorch:运行时错误:reduce 同步失败:cudaErrorAssert:设备端断言已触发