我有两个二维数组,一个是数字类型,另一个是布尔值类型:
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.]])
array([r[ridx].tolist() for r, ridx in izip(x, idx) if ridx.sum() > 0])
比使用enumerate
更易读。 - Korem