我正在尝试使用逻辑索引提取子数组,如下所示:
a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
a
Out[45]:
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
b = np.array([False, True, False, True])
a[b, b]
Out[49]: array([ 6, 16])
Python根据a中的每个元素对b的逻辑索引进行评估。 然而,在Matlab中,您可以执行以下操作:
>> a = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
a =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
>> b = [2 4]
b =
2 4
>> a(b, b)
ans =
6 8
14 16
如何在Python中实现相同的结果,而无需执行...
c = a[:, b]
c[b,:]
Out[51]:
array([[ 6, 8],
[14, 16]])
a[b][:,b]
吗? - not_speshalsub2ind
(或类似的方法)来生成等效压缩矩阵的索引。而在numpy
中则相反。你的[b,b]
选择了一对;获取块需要额外的步骤(最简单的方法是使用np.ix_
)。 - hpaulj