【发布时间】:2016-01-12 03:38:41
【问题描述】:
我有一个 NumPy 数组 arr 和一个(反向)掩码 mask。为简单起见,我们假设它们都是 1d。我想更改arr 中的nth 非屏蔽值。
一个例子:
import numpy as np
arr = np.arange(5)
mask = np.array((True, False, True, True, False))
很遗憾,
arr[mask][-1] = 100
我预计会返回的
array([0, 1, 2, 100, 4])
由于NumPy array views on non-consecutive items 中列出的原因而无法正常工作。
一种解决方法是将允许的值存储在一个新变量中,更改相应的值,然后将所有值复制回原始数组:
tmp = arr[mask]
tmp[-1] = 100
arr[mask] = tmp
但是,这种解决方案是丑陋且低效的,因为我必须复制许多根本不想更改的值。
有没有人有优雅的方法来处理这类问题?我会对最通用的解决方案感兴趣,这样我就可以使用tmp 进行所有经典的赋值操作。但是,如果有一种仅适用于具体描述的情况的有效方法,我仍然会对它感兴趣!
【问题讨论】:
标签: python arrays numpy indexing