我有两个矩阵:
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
。
是否有必要循环所有值或是否有更快的解决方案?
答案 0 :(得分:3)
以元素为单位乘以数组将起作用:
valid_data = data .* filter;
或者,要替换为NaN
,我们可以使用0/0
分区的技巧:
valid_data = data .* (filter./filter);
最后,您可以使用逻辑索引:
valid_data = data; valid_data(~filter) = NaN;