numpy 数组掩码的区别
Difference in numpy array masking
我有三个 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].
我的问题是:为什么这两个命令不相同,或者第一个甚至做了什么?
首先,您必须检查矩阵内部以及哪个矩阵可以满足您的需求。
mask
输出
[[0, 0, 0],
[0, 1, 0],
[0, 0, 0]]
但是destination[mask == 1]
给你一个布尔矩阵
mask == 1
输出
[[False, False, False],
[False, True, False],
[False, False, False]]
鉴于:
destination[mask]
输出
[[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]
[[0, 1, 2],
[3, 4, 5],
[0, 1, 2]],
[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]]
但是使用 destination[mask == 1]
给你一个单一的值,它是 4。source[mask == 1]
是一样的,它给你单一的值 1。
如果您使用 destination[mask==1] = source[mask==1]
而不是 destination[mask] = source[mask]
,您只会更改目标矩阵中的值 4。
希望我的解释清楚。
编辑:
希望我理解你的问题是正确的:
简单的整数索引结构 x[[i]]
给出了矩阵的第 i 行。
所以 destination[0,1,2]
给出:
[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]]
对于一个可以理解的例子,输入 destination[1,2,0]
导致
[[3, 4, 5],
[6, 7, 8],
[0, 1, 2]]
我有三个 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].
我的问题是:为什么这两个命令不相同,或者第一个甚至做了什么?
首先,您必须检查矩阵内部以及哪个矩阵可以满足您的需求。
mask
输出
[[0, 0, 0],
[0, 1, 0],
[0, 0, 0]]
但是destination[mask == 1]
给你一个布尔矩阵
mask == 1
输出
[[False, False, False],
[False, True, False],
[False, False, False]]
鉴于:
destination[mask]
输出
[[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]
[[0, 1, 2],
[3, 4, 5],
[0, 1, 2]],
[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]]
但是使用 destination[mask == 1]
给你一个单一的值,它是 4。source[mask == 1]
是一样的,它给你单一的值 1。
如果您使用 destination[mask==1] = source[mask==1]
而不是 destination[mask] = source[mask]
,您只会更改目标矩阵中的值 4。
希望我的解释清楚。
编辑:
希望我理解你的问题是正确的:
简单的整数索引结构 x[[i]]
给出了矩阵的第 i 行。
所以 destination[0,1,2]
给出:
[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]]
对于一个可以理解的例子,输入 destination[1,2,0]
导致
[[3, 4, 5],
[6, 7, 8],
[0, 1, 2]]