python - Numpy 中的逻辑索引与 MATLAB 中的两个索引

标签 python matlab numpy indexing

如何使用 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 中使用两个索引进行逻辑索引的正确方法是什么?

最佳答案

一般来说,当 a 和 b 都是数组(matlab 中的向量)时,有两种解释 X[a, b] 的方法,“内部式”索引或“外部式”索引.

matlab 的设计者选择了“outer-style”索引,而 numpy 的设计者选择了 inner-style 索引。要在 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)]

关于python - Numpy 中的逻辑索引与 MATLAB 中的两个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22357622/

相关文章:

matlab - 如何将函数应用于矩阵中的所有行?

matlab - improfile 的写入等价物

c - 将整数分配给指针的 mxArray

python:对一系列元素的列表列表进行排序

python - Scipy:高效生成一系列积分(积分函数)

python - 创建从数字到唯一数字范围的映射

python - 如何自定义使用 string.punctuation 过滤掉哪些字符?

python - Pandas .read_csv FileNotFoundError : File b'\xe2\x80\xaa<etc>' despite correct path

python - Django-Models:TypeError:强制转换为 Unicode:需要字符串或缓冲区,用户发现

python - Python 的 any 和 all 函数是如何工作的?