如何基于掩码数组更改numpy数组?

时间:2019-11-03 15:31:49

标签: python arrays numpy mask

我有一个数组data_set,大小:(172800,3)和掩码数组,大小(172800)由1和0组成。我想用我定义的值替换基于掩码数组中值(0或1)的data_set数组的值形式:ex:[0,0,0]或[128,16,128]。

我尝试过“ np.placed”函数,但是这里的问题是掩码数组的大小不正确。

我也检查了更多的pythonic方式: data_set [mask] = [0,0,0]效果很好,但是对于某些存在的理由,仅适用于前两个元素。

data_set[mask]= [0,0,0]

data_set = np.place(data_set, mask, [0,0,0])

我的预期输出是,如果掩码值为1,则将data_set矩阵中element的值更改为[0,0,0]。

例如。

data_set = [[134,123,90] , [234,45,65] , [32,233,45]]
mask = [ 1, 0, 1]

output = [[0,0,0] , [234, 45,65] , [0,0,0]]

1 个答案:

答案 0 :(得分:0)

当您尝试使用mask索引数据时,numpy假定您正在为其提供索引列表。使用布尔数组,或将掩码转换为索引列表:

import numpy as np

data_set = np.array([[134,123,90] , [234,45,65] , [32,233,45]])
mask = np.array([1, 0, 1])
val = np.zeros(data_set.shape[1])

data_set[mask.astype(bool),:] = val
# or
data_set[np.where(mask),:] = val

第一个将整数数组转换为布尔数组,而第二个将创建掩码不为零的索引列表。

您可以将val设置为所需的任何值,只要它与数据集的其余维度(在这种情况下为3)相匹配即可。

相关问题