【发布时间】:2023-03-18 23:27:01
【问题描述】:
我想使用 MATLAB 将 4D 数组 M_ ijkl 中的多个值更改为 NaN。
我使用find 来获取满足 k = 2 和 l特定条件的索引 i 和 j > = 4(在我的情况下,它是 t_4 时间位置的 y 分量)。我现在想将这些 i 和 j 组合以及所有 k 和 l 的所有条目设置为 NaN .
我用这个方法来做(nkjt的例子):
% initialise
M = zeros(10,10,2,4);
% set two points in (:,:,2,4) to be above threshold.
M(2,4,2,4)=5;
M(6,8,2,4)=5;
% find and set to NaN
[i,j] = find(M(:,:,2,4) > 4);
M(i,j,:,:)= NaN;
% count NaNs
sum(isnan(M(:))) % returns 32
如本例所示,此方法非常慢:
M = rand(360,360,2,4);
threshold = 0.5;
% slow and wrong result
[i,j] = find(M(:,:,2,4) > threshold);
tic;
M(i,j,:,:) = NaN;
toc;
Elapsed time is 54.698449 seconds.
请注意,tic 和 toc 不会为 find 计时,所以这不是问题。
在 Rody 和 njkt 的帮助下,我也意识到我的方法实际上并没有达到我想要的效果。我只想使用find 找到的组合 i 和 j 更改条目(适用于所有 k 和 l em>),即[2,4,:,:] 和[6,8,:,:],但不是 [2,8,:,:] 和[6,4,:,:]。在第一个示例中,sum(isnan(M(:))) 应该返回 16。
【问题讨论】:
标签: arrays performance matlab nan