给定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)
首先,确保您的rows
和cols
实际上是 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)
说明
如果您使用布尔值列表而不是ndarray
numpy 会将其转换False/True
为0/1
,并将其解释为所需的行/列的索引。当使用 bool 时ndarray
,您实际上正在使用一些特定的 NumPy 机制。