加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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])

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读