【发布时间】:2018-01-26 15:11:59
【问题描述】:
我有一个作为二维 numpy 数组(布尔数组)存在的布尔掩码
array([[ True, True, True, True, True, True, True],
[ True, True, True, True, True, True, True],
[ True, True, True, True, True, True, True],
[ True, True, True, True, True, True, True],
[False, False, False, False, False, False, False],
[False, False, False, False, False, False, False],
[False, False, False, False, False, False, False]], dtype=bool)
我还有一个单独的二维 numpy 值数组,与布尔掩码(值数组)具有相同的维度
array([[ 19.189 , 23.2535, 23.1555, 23.4655, 22.6795, 20.3295, 19.7005],
[ 20.688 , 20.537 , 23.8465, 21.2265, 24.5805, 25.842 , 23.198 ],
[ 22.418 , 21.0115, 21.0355, 20.217 , 24.1275, 24.4595, 21.981 ],
[ 21.156 , 18.6195, 23.299 , 22.5535, 23.2305, 28.749 , 21.0245],
[ 21.7495, 19.614 , 20.3025, 21.706 , 22.853 , 19.623 , 16.7415],
[ 20.9715, 21.9505, 21.1895, 21.471 , 21.0445, 21.096 , 19.3295],
[ 24.3815, 26.2095, 25.3595, 22.9985, 21.586 , 23.796 , 20.375 ]])
我想做的是从值数组中删除布尔区域中相同位置等于False 的所有元素。是否有捷径可寻?
此示例所需的输出是:
array([[ 19.189 , 23.2535, 23.1555, 23.4655, 22.6795, 20.3295, 19.7005],
[ 20.688 , 20.537 , 23.8465, 21.2265, 24.5805, 25.842 , 23.198 ],
[ 22.418 , 21.0115, 21.0355, 20.217 , 24.1275, 24.4595, 21.981 ],
[ 21.156 , 18.6195, 23.299 , 22.5535, 23.2305, 28.749 , 21.0245]])
在这个特定示例中,所有False 值都存在于布尔数组的末尾,但情况并非总是如此,它们可以随机分布。因此,我需要一种从值数组中删除布尔数组中对应掩码值等于False 的任何元素的方法
【问题讨论】:
-
整行是真还是假?还是会有混合的?
-
如果我的回答有帮助,您可以mark it accepted 或告诉我出了什么问题,以便我解决。
-
arr[mask]做出这样的选择。结果将是 1d,因为通常这样的掩码可以选择每行不同数量的值。在某些情况下,您可能能够将结果重塑为有意义的二维数组。
标签: python arrays numpy multidimensional-array slice