【问题标题】:Logical indexing in Numpy with two indices as in MATLABNumpy 中的逻辑索引与 MATLAB 中的两个索引
【发布时间】:2014-04-16 22:44:40
【问题描述】:

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

【问题讨论】:

    标签: python matlab numpy indexing


    【解决方案1】:

    当 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)]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 2023-03-10
      • 2014-11-05
      相关资源
      最近更新 更多