我想使用 MATLAB将4D数组M_ijkl中的多个值更改为 NaN。我find
用来获取满足k = 2 和l = 4 特定条件的索引i和j(在我的情况下,它是时间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 的帮助下,我也意识到我的方法实际上并没有达到我想要的效果。我只想用我找到的组合i和jfind
更改条目(对于所有k和l),即[2,4,:,:]
and [6,8,:,:]
,但不是 [2,8,:,:]
and [6,4,:,:]
。在第一个示例中sum(isnan(M(:)))
应该返回 16。