使用布尔索引复制或查看numpy子数组

Mar*_*nes 5 python numpy

给定2D numpy数组,即;

import numpy as np

data = np.array([
     [11,12,13],
     [21,22,23],
     [31,32,33],
     [41,42,43],         
     ])
Run Code Online (Sandbox Code Playgroud)

我需要创建一个新的子数组或根据所需行和列的两个屏蔽向量修改所选元素;

rows = [False, False, True, True]
cols = [True, True, False]
Run Code Online (Sandbox Code Playgroud)

这样

print subArray

# [[31 32]
#  [41 42]]
Run Code Online (Sandbox Code Playgroud)

Pie*_* GM 5

首先,确保您的rowscols实际上是 boolean ndarrays,然后使用它们来索引您的数据

rows = np.array([False, False, True, True], dtype=bool)
cols = np.array([True, True, False], dtype=bool)
data[rows][:,cols]
Run Code Online (Sandbox Code Playgroud)

说明 如果您使用布尔值列表而不是ndarraynumpy 会将其转换False/True0/1,并将其解释为所需的行/列的索引。当使用 bool 时ndarray,您实际上正在使用一些特定的 NumPy 机制。