python - 沿任意轴具有逻辑值的掩码数组

标签 python arrays numpy

假设我有一个多维数组和一个逻辑值向量。我想沿着任意(第 n)维度选择项目。在下面的示例中,我将选择沿第二个维度的第一个和第三个值:

>>> A = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
>>> mask = np.array([True, False, True, False])
>>> dim_to_mask = 1  # i.e. 2nd dimension because it's 0-indexed
>>> B = ... # here do mask the dim_to_mask-th dimension - HOW???
>>> B
[[1, 3], 
 [5, 7], 
 [9, 11]]

注意:假设逻辑向量的长度对应于给定轴的长度。

我知道如果数组只是使用 [] 运算符的一维数组,那会很容易,但这是多维问题。

实际上我想要类似函数 take(indices, axis) 的东西,它沿着任意轴选择给定的索引。唯一的区别是我有逻辑值而不是数字索引。

我的目标也是最快的解决方案,因此将逻辑值向量转换为索引并使用 take 可能不是最好的解决方案。

我想这一定是我所遗漏的明显的东西。 :)

最佳答案

您可以使用np.compress :

>>> A.compress(mask, axis=1)
array([[ 1,  3],
       [ 5,  7],
       [ 9, 11]])

此函数返回数组沿特定轴的切片。它接受一个 bool 数组来进行选择。

关于python - 沿任意轴具有逻辑值的掩码数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29500606/

相关文章:

python - 为动态方程输入组织和构建 numpy 数组

Python Numpy 为一定范围内的 X 和 Y 值生成坐标

python - semilogx Python 图中 x 轴上的更多刻度

python - 在 hadoop 和 yarn 上安装 pyspark

python - Python中C类型整数的最大值和最小值

python - Pandas read_csv 声明 dtype convets 列不正确

javascript - 仅使用包含特定值的元素从现有数组创建新数组

c++ - 将运算符 new[] 和放置 new 与普通 delete[] 混合

java - 数组中存在重复值,但未找到重复值

python - 使用 Python pandas 获取数据框的所有行