如何使用Numpy复制在MATLAB中完成的索引?
X=magic(5);
M=[0,0,1,2,1];
X(M==0,M==2)
返回:
ans =
8
14
我发现在Numpy中这样做是不正确的,因为它没有给我相同的结果..
X = np.matrix([[17, 24, 1, 8, 15],
[23, 5, 7, 14, 16],
[ 4, 6, 13, 20, 22],
[10, 12, 19, 21, 3],
[11, 18, 25, 2, 9]])
M=array([0,0,1,2,1])
X.take([M==0]).take([M==2], axis=1)
因为我得到了:
matrix([[24, 24, 24, 24, 24]])
在numpy中使用两个索引进行逻辑索引的正确方法是什么?
答案 0 :(得分:7)
一般来说,当a和b都是数组(matlab中的向量),"内部风格"时,有两种方法可以解释X[a, b]
。索引或"外部风格"索引。
matlab的设计师选择了"外部风格"索引和numpy的设计者选择了内部索引。要做"外部风格" numpy中的索引可以使用:
X[np.ix_(a, b)]
# This is roughly equal to matlab's
X(a, b)
你可以做的完整性"内心风格"通过以下方式在matlab中建立索引:
X(sub2ind(size(X), a, b))
# This is roughly equal to numpy's
X[a, b]
简而言之,请尝试X[np.ix_(M == 0, M == 1)]
。