如何使用布尔行的2D数组过滤另一个2D数组?

资本主义

我在(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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用1d布尔数组过滤2d数组

根据另一个2D数组重新排序2D数组

从2D数组中选择不在另一个2D数组中的行

如何查找在另一个2d数组中出现的2d numpy数组的索引

使用NumPy从另一个数组及其索引创建2D数组

python使用较小的2D数组与另一个较大的数组进行映射

如何在2D数组上使用numpy.argsort对另一个2D数组进行排序

使用 numpy 构造一个数组,其中的行从另一个 2D 数组中提取为 2x2 块

如何向量化2D数组和另一个向量之间的运算?

使用Java中的另一个类从2D数组打印用户输入?

如何将2D numpy数组映射到带有另一个2D数组作为映射的1D数组上?

将2d字符数组复制到另一个2d字符数组

算法-在另一个2D数组中查找2D数组的存在

将2d数组的元素乘以另一个2d数组的元素的方法

针对2d数组的每一行对另一个2d数组执行数学运算

从另一个数组更新numpy 2d数组索引

将2D数组存储在另一个数组中-Java

如何用另一个2D数组对3D numpy数组的每一行进行排序?

如何将一个2d数组的内容复制到另一个?(VBA)

用另一个2d数组foo索引2d数组bar,其中foo包含bar对应列的行索引

JavaScript-从2D数组过滤数组

通过另一个2d列表过滤2d列表

从2d数组创建另一个2d数组,该数组由从原始数组中随机选择的值(行之间不共享的值)组成,而无需使用循环

我如何从2D数组中选择值并添加到另一个2D数组Python中

使用另一个2D数组作为索引将值分配给2D数组

用另一个数组过滤D3多维数组

设置2D数组值会覆盖C中的另一个值

使用布尔数组在numpy中为2D数组建立索引

将单线从Numpy Python转换为Julia,这涉及将一个2D数组映射到另一个2D数组