【发布时间】:2019-10-12 23:29:08
【问题描述】:
我有三个 numpy 数组,一个源数组,一个目标数组和一个掩码数组。我只想在掩码等于 1 的地方用源中的相同值替换目标中的值。
我天真的尝试是:
import numpy as np
destination = np.arange(9).reshape((3,3))
source = np.ones((3,3))
mask = np.zeros((3,3)).astype(np.uint8)
mask[1,1]=1
destination[mask] = source[mask]
这导致我 destination 存在
[[1, 1, 1],
[1, 1, 1],
[6, 7, 8]]
我希望它会是这样的
[[0, 1, 2],
[3, 1, 5],
[6, 7, 8]].
我确实得到了正确的结果,当我这样做时
destination[mask==1] = source[mask==1].
我的问题是:为什么这两个命令不相同,或者第一个命令甚至做什么?
【问题讨论】:
-
为什么使用
np.uint8作为掩码?那不应该是一个布尔数组吗? -
检查
source[mask]给你什么 -
公平,如果我将它转换为布尔值,它会做它应该做的。但我的问题仍然存在,我的第一个版本实际上是做什么的?
-
@Divakar 我来自这一边,了解正在发生的事情正是我遇到的问题,因此提出了这个问题。