将过滤掩码应用于数据矩阵

时间:2017-11-09 09:33:12

标签: matlab matrix filtering

我有两个矩阵:

data = imported_data.data; % matrix from hdf5, 30x20000 single
filter = imported_data.invalid_flags == 0; % 30x20000 logical

我想合并来自两个矩阵的信息,以便获得具有相同维度的新数据矩阵,以及filter 0设置为0的位置或NaN。这是一个小例子来澄清我的问题:

data =       [3, 4, 5;
              2, 3, 4];
filter =     [0, 1, 1;
              1, 0, 1];
valid_data = [0, 4, 5; % 'reset' values specified in filter
              2, 0, 4];

我尝试了valid_data = data(filter);,但这导致了400000x1单矩阵。但是,我想要一个带有原始尺寸的矩阵valid_data

是否有必要循环所有值或是否有更快的解决方案?

1 个答案:

答案 0 :(得分:3)

以元素为单位乘以数组将起作用:

valid_data = data .* filter;

或者,要替换为NaN,我们可以使用0/0分区的技巧:

valid_data = data .* (filter./filter);

最后,您可以使用逻辑索引:

valid_data = data; valid_data(~filter) = NaN;