python – 如何使用布尔行的2D数组来过滤另一个2D数组?
发布时间:2020-12-20 13:14:05 所属栏目:Python 来源:网络整理
导读:我在(3,m)数组中有一些数据. 我有另一个(n,3)形状的面具阵列.此掩码的行是布尔过滤器,需要在执行某些功能之前应用于数据阵列.是否有矢量化方式应用过滤器并计算函数? 假设函数是一个mean(),这是一个使用循环清晰的示例.我想使用纯粹的Numpy(没有列表理解)来
我在(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],[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.],7.]]) 解决方法
使用
np.dot 进行矩阵乘法很容易解决这个问题,因此必须非常高效.这是实施 –
np.true_divide(masks.dot(data),masks.sum(1)[:,None]) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |