python - numpy 中的多维 bool 数组索引

标签 python arrays numpy

我有两个二维数组,一个是数字,一个是 bool 值:

x = 
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.],
       [ 2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.],
       [ 5.,  5.,  5.,  5.,  5.,  5.,  5.,  5.,  5.,  5.],
       [ 6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.],
       [ 7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.],
       [ 8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.],
       [ 9.,  9.,  9.,  9.,  9.,  9.,  9.,  9.,  9.,  9.]])

idx = 
array([[False, False, False, False, False, False, False, False, False, False],
       [False,  True,  True,  True,  True,  True, False, False, False, False],
       [False,  True,  True,  True,  True,  True, False, False, False, False],
       [False,  True,  True,  True,  True,  True, False, False, False, False],
       [False, False, False,  True,  True,  True,  True, False, False, False],
       [False, False, False, False,  True,  True,  True, False, False, False],
       [False, False, False, False, False, False,  True, False, False, False],
       [False, False, False, False, False, False, False,  True, False, False],
       [False, False, False, False, False, False, False, False, False, False],
       [False, False, False, False, False, False, False, False, False, False]], dtype=bool)

当我索引数组时,它返回一个一维数组:

x[idx]
array([ 1.,  1.,  1.,  1.,  1.,  2.,  2.,  2.,  2.,  2.,  3.,  3.,  3.,
    3.,  3.,  4.,  4.,  4.,  4.,  5.,  5.,  5.,  6.,  7.])

如何索引数组并返回具有预期输出的二维数组:

x[idx]
array([[ 1.,  1.,  1.,  1.,  1.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 3.,  3.,  3.,  3.,  3.],
       [ 4.,  4.,  4.,  4.],
       [ 5.,  5.,  5.],
       [ 6.],
       [ 7.]])

最佳答案

您的命令返回一个一维数组,因为如果不 (a) 破坏通常需要的列结构,就不可能实现。例如,您请求的输出中的 7 原本属于第 7 列,现在位于第 0 列;并且 (b) numpy 不支持在同一维度上具有不同大小的高维数组。我的意思是 numpy 不能有一个数组,其前三行的长度为 5,第 4 行的长度为 4,等等 - 所有行(相同维度)需要具有相同的长度。

我认为您可能希望得到的最好结果是数组的数组(而不是二维数组)。这就是我构建它的方式,尽管可能有更好的方法我不知道:

In [9]: from itertools import izip
In [11]: array([r[ridx] for r, ridx in izip(x, idx) if ridx.sum() > 0])
Out[11]: 
array([array([ 1.,  1.,  1.,  1.,  1.]), array([ 2.,  2.,  2.,  2.,  2.]),
       array([ 3.,  3.,  3.,  3.,  3.]), array([ 4.,  4.,  4.,  4.]),
       array([ 5.,  5.,  5.]), array([ 6.]), array([ 7.])], dtype=object)

关于python - numpy 中的多维 bool 数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26284846/

相关文章:

javascript - AngularJs 中的数组映射

javascript - 存储此数据的最佳方式(数组、对象等)

python - 如何从元组列表中删除重复项但保持原始顺序

python - 如何正确使用 scipy 的 skew 和 kurtosis 函数?

Python转换街道类型缩写?

python - Pygame:get_at 始终返回 'None'

python - 密码哈希程序

python - 如何使用 Python 暂时禁用键盘输入

python - 如何从代码中删除 RunTimeWarning 错误?

java - 数组中整数的总和并将整数乘以 1.5