我对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()
的位置替换数据值,以防止分配新的内存。
谢谢!
答案 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)