numpy阵列掩蔽的差异

2024-04-24 11:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三个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].

我的问题是:为什么这两个命令不相同,或者第一个命令做什么?你知道吗


Tags: import命令numpysource目标as地方np
1条回答
网友
1楼 · 发布于 2024-04-24 11:25:26

首先,你必须检查矩阵的内部,以及哪个矩阵给了你想要的。你知道吗

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]]

相关问题 更多 >