Matlab 对数据矩阵应用过滤掩码

Matlab 对数据矩阵应用过滤掩码,matlab,matrix,filtering,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

我有两个矩阵:

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\u data=data(过滤器),但这导致了一个400000x1的单一矩阵。但是,我希望有一个原始维度的矩阵
有效的\u data


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

将数组元素相乘即可:

valid_data = data .* filter;
或者,要替换为
NaN
,我们可以使用
0/0
除法:

valid_data = data .* (filter./filter);
最后,您可以使用逻辑索引:

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

将数组按元素相乘将起作用:

valid_data = data .* filter;
或者,要替换为
NaN
,我们可以使用
0/0
除法:

valid_data = data .* (filter./filter);
最后,您可以使用逻辑索引:

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

data
filter
的维度是相同的,所以我不明白你的意思。
data
filter
的维度是相同的,所以我不明白你的意思。回答得好,谢谢!有“最好”的方法吗?例如,考虑到性能、资源……我认为第一个建议是“最好的”,因为它需要最少的操作,但实际上,您可以使用上述任何解决方案,因为它们都非常轻量级。我确信您的代码中还有其他需要更多资源的区域。要找到这些区域,请使用。非常好的答案,谢谢!有“最好”的方法吗?例如,考虑到性能、资源……我认为第一个建议是“最好的”,因为它需要最少的操作,但实际上,您可以使用上述任何解决方案,因为它们都非常轻量级。我确信您的代码中还有其他需要更多资源的区域。要查找这些区域,请使用。