[英]Indexing with two boolean arrays in NumPy
我在 numpy 数组中有一些数据,然后我想要 select 中的一个子集,并更新这些值。
假设第一个数组 A 有 N 个元素。 然后,我使用一个 boolean 数组 mask1,其中 N 个元素作为第一个子集 select 的掩码。 然后,我使用带有 sum(mask1) 元素的第二个 boolean 数组 mask2 到第一个子集的子集 select。 但是当我尝试更新这些值时,它们并没有存储到原始数组中。
代码示例:
N = 10
A = np.arange(N)
# Create mask of size N, with only some True values
mask1 = np.zeros(N, dtype = np.bool)
mask1[:7] = True
# Create mask of size (sum(mask1)), with only some True values
mask2 = np.zeros(np.sum(mask1), dtype = np.bool)
mask2[2:] = True
# Indexing with both masks works as expected:
print(A[mask1][mask2])
这打印
[2 3 4 5 6]
正如预期的那样。 但是当我尝试更新以这种方式索引的值时,它不起作用。
# Trying to update those values does not work:
A[mask1][mask2] = -1
print(A)
这将打印原始的、未更改的数组:
[0 1 2 3 4 5 6 7 8 9]
如果我仅使用一个 boolean 数组进行索引,则值会更新,因此这是一种可能的解决方法。 然而,我正在为一个物理过程实现一个算法,首先创建一个掩码,根据一个标准进行子集化,然后根据另一个标准进一步进行子集化是很自然的,所以如果我能做到这一点,那将是非常优雅的工作。
一个高性能的将与链式掩蔽-
mask1[mask1] = mask2
A[mask1] = -1
不是那么高效 -
A[np.flatnonzero(mask1)[mask2]] = -1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.