我在(3,m)数组中有一些数据。
我还有(n,3)形状的另一个蒙版数组。此掩码的行是布尔过滤器,在执行某些功能之前需要将其应用于数据数组。有矢量化的方法来应用滤波器并计算函数吗?
为了清楚起见,以下是使用循环的示例,假设该函数为mean()。我想使用纯粹的Numpy来做到这一点(无需列表理解)。
(显然,实际上数组的大小要大得多。)
import numpy as np
data = np.array([
[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]
])
masks = np.array([
[True, True, False],
[False, True, False],
[False, True, True],
[True, False, False],
[True, False, True]
])
means = np.array([data[mask].mean(axis=0) for mask in masks])
# means
array([[ 2., 3., 4., 5.],
[ 4., 5., 6., 7.],
[ 6., 7., 8., 9.],
[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.]])
这个问题是容易解决matrix-multiplication
使用np.dot
,因此必须是真正有效。这是实现-
np.true_divide(masks.dot(data),masks.sum(1)[:,None])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句