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