如何在 Matlab 中将 NaN 分配给值 j < k
How to assign NaN to values j < k in Matlab
我是 Matlab 新手,我想将 NaN 值分配给大小为 (j, k, l) 的数组,无论维度是 j < k 还是 j < l。我如何最有效地做到这一点?
使用花式向量化:
% this may be memory expensive for big matrices:
[j,k,l]=meshgrid(1:size(A,1),1:size(A,2),1:size(A,3));
% Tada!
A(j<k | k<l)=NaN;
如果您没有足够的 RAM(或者不想为此使用它),那么最好的选择就是 loopy:
for jj=1:size(A,1)
for k=1:size(A,2)
for l=1:size(A,3)
if (jj<k | k<l)
A(jj,k,l)=NaN;
end
end
end
end
这可能会更慢,但不需要任何额外的内存。
您可以使用 bsxfun
高效地完成它:
J = (1:size(A,1)).';
K = 1:size(A,2);
L = reshape(1:size(A,3),1,1,[]);
A(bsxfun(@or,bsxfun(@lt,J,K),bsxfun(@lt,J,L))) = NaN;
在 MATLAB r2016b 或 Octave 中你可以简单地写:
J = (1:size(A,1)).';
K = 1:size(A,2);
L = reshape(1:size(A,3),1,1,[]);
A(J<K|J<L)=NaN;
矩阵测试结果 A = rand(500,400,300)
:
________________________________
| METHOD | MEMORY | SPEED |
|==========|==========|==========|
| MESHGRID | 1547 MB | 1.24 Secs|
|----------|----------|----------|
| BSXFUN | 57 MB | 0.18 Secs|
|__________|__________|__________|
我是 Matlab 新手,我想将 NaN 值分配给大小为 (j, k, l) 的数组,无论维度是 j < k 还是 j < l。我如何最有效地做到这一点?
使用花式向量化:
% this may be memory expensive for big matrices:
[j,k,l]=meshgrid(1:size(A,1),1:size(A,2),1:size(A,3));
% Tada!
A(j<k | k<l)=NaN;
如果您没有足够的 RAM(或者不想为此使用它),那么最好的选择就是 loopy:
for jj=1:size(A,1)
for k=1:size(A,2)
for l=1:size(A,3)
if (jj<k | k<l)
A(jj,k,l)=NaN;
end
end
end
end
这可能会更慢,但不需要任何额外的内存。
您可以使用 bsxfun
高效地完成它:
J = (1:size(A,1)).';
K = 1:size(A,2);
L = reshape(1:size(A,3),1,1,[]);
A(bsxfun(@or,bsxfun(@lt,J,K),bsxfun(@lt,J,L))) = NaN;
在 MATLAB r2016b 或 Octave 中你可以简单地写:
J = (1:size(A,1)).';
K = 1:size(A,2);
L = reshape(1:size(A,3),1,1,[]);
A(J<K|J<L)=NaN;
矩阵测试结果 A = rand(500,400,300)
:
________________________________
| METHOD | MEMORY | SPEED |
|==========|==========|==========|
| MESHGRID | 1547 MB | 1.24 Secs|
|----------|----------|----------|
| BSXFUN | 57 MB | 0.18 Secs|
|__________|__________|__________|