【问题标题】:Apply a filtering mask to a data matrix将过滤掩码应用于数据矩阵
【发布时间】:2017-11-09 19:26:50
【问题描述】:

我有两个矩阵:

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

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

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

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

【问题讨论】:

  • datafilter 的尺寸是一样的,所以我不明白你的意思。

标签: matlab matrix filtering


【解决方案1】:

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

valid_data = data .* filter;

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

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

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

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

【讨论】:

  • 很好的答案,谢谢!有没有“最好”的方法来做到这一点?例如。考虑性能、资源……
  • 我认为第一个建议是“最好的”,因为它需要最少的操作,但实际上,您可以使用上述任何解决方案,因为它们都非常轻量级。我确信您的代码中会有其他需要更多资源的区域。要查找这些地区,请使用profiler tool
猜你喜欢
  • 2013-07-27
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 2021-06-24
  • 2015-03-24
  • 1970-01-01
相关资源
最近更新 更多