私は2つのマトリックスを持っています:
data = imported_data.data; % matrix from hdf5, 30x20000 single
filter = imported_data.invalid_flags == 0; % 30x20000 logical
2つの行列の情報をマージして、同じ次元と位置の新しいデータ行列を取得したい 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
元の寸法で。
すべての値をループする必要がありますか、またはより迅速な解決策がありますか?
回答:
回答№1の場合は3配列を要素ごとに乗算すると機能します。
valid_data = data .* filter;
または、 NaN
トリックを使用できます 0/0
分割:
valid_data = data .* (filter./filter);
最後に、論理インデックスを使用できます。
valid_data = data; valid_data(~filter) = NaN;