/ /フィルターマスクをデータ行列に適用-MATLAB、matrix、filtering

データマトリックスにフィルタマスクを適用する - matlab、matrix、filtering

私は2つのマトリックスを持っています:

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

2つの行列の情報をマージして、同じ次元と位置の新しいデータ行列を取得したい filter0 に設定 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の場合は3

配列を要素ごとに乗算すると機能します。

valid_data = data .* filter;

または、 NaN トリックを使用できます 0/0 分割:

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

最後に、論理インデックスを使用できます。

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