【问题标题】:Using a boolean vector to extract a subarray of an ndarray使用布尔向量提取 ndarray 的子数组
【发布时间】:2017-08-20 23:27:17
【问题描述】:

我有一个 ndarray:

ndaM = np.array([[1,2,3],[4,5,6],[7,8,9]]);

和一个0和1的向量:

vSet = [0,1,1];

如何使用vSet 提取只有在vSet 中索引为非零的行和列的子矩阵?在这种情况下,矩阵

[[5,6],[8,9]]

【问题讨论】:

    标签: python numpy indexing boolean slice


    【解决方案1】:

    这是一个使用np.ix_一次性切片的解决方案

    ndaM[np.ix_(*2*(np.array(vSet, bool),))]
    # array([[5, 6],
    #        [8, 9]])
    

    或者更易读的两行

    mask = np.array(vSet, bool)
    ndaM[np.ix_(mask, mask)]
    

    【讨论】:

    • 值得注意的是np.ix_np.nonzero (np.where) 应用于布尔输入以将其转换为数字索引。 (array([[1], [2]]), array([[1, 2]]))。 `
    • @hpaulj 谢谢!我没有意识到这一点。
    【解决方案2】:

    您可以使用两步切片:

    # convert vSet to a boolean array
    bSet = np.array(vSet).astype(bool)
    
    # slice in two steps, rows first, then columns
    ndaM[bSet][:, bSet]
    
    #array([[5, 6],
    #       [8, 9]])
    

    或者使用np.ix_创建索引网格网格,然后用它来索引:

    ndaM[np.ix_(bSet, bSet)]
    #array([[5, 6],
    #       [8, 9]])
    

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      相关资源
      最近更新 更多