numpy-多维布尔掩码

时间:2018-12-17 12:04:06

标签: python numpy

我对Python和numpy还是很陌生,如果没有手动迭代,我只是无法使其正常工作。

我有一个带有浮点值的n维数据数组和一个形状相同的布尔“掩码”数组。由此,我需要获得一个形状与其他形状相同的新数组,其中数据数组中的所有值均位于install.packages("foreign") library("foreign") setwd("res") files <-list.files() data <- 0 for (f in files) { tempData = scan( f, what="character") data <- c(data,tempData) } > data [1] 0 处。其他所有内容应为True

0.

似乎# given data = np.array([[1., 2.], [3., 4.]]) mask = np.array([[True, False], [False, True]]) # target [[1., 0.], [0., 4.]] 可以提供此功能,但我无法使其正常工作。

奖金:不要创建新数组,而是在mask为numpy.where()的位置替换数据值,以防止分配新的内存。

谢谢!

2 个答案:

答案 0 :(得分:3)

这应该有效

data[~mask] = 0

Numpy布尔数组可用作索引(https://docs.scipy.org/doc/numpy-1.15.0/user/basics.indexing.html#boolean-or-mask-index-arrays)。该操作仅适用于值为“ True”的像素。在这里,您首先需要反转蒙版,使False变为True。之所以需要反转,是因为您想对False值的像素进行运算。

答案 1 :(得分:0)

此外,您可以将它们相乘。因为在数学运算中输入布尔数组时,“ True”和“ False”分别被视为“ 1”和“ 0”。所以,

#element-wise multiplication
data*mask

np.multiply(data, mask)