给定2D numpy数组,即。;
import numpy as np
data = np.array([
[11,12,13],
[21,22,23],
[31,32,33],
[41,42,43],
])
我需要创建一个新的子数组,或者根据所需行和列的两个屏蔽向量修改所选元素;
rows = [False, False, True, True]
cols = [True, True, False]
这样
print subArray
# [[31 32]
# [41 42]]
答案 0 :(得分:4)
首先,确保您的rows
和cols
实际上是布尔ndarrays
,然后使用它们来索引您的数据
rows = np.array([False, False, True, True], dtype=bool)
cols = np.array([True, True, False], dtype=bool)
data[rows][:,cols]
解释
如果您使用布尔值的列表而不是 ndarray
,numpy会将False/True
转换为0/1
,并将其解释为您想要的行/列的索引。当使用bool ndarray
时,您实际上正在使用一些特定的NumPy机制。