我是一个Matlab新手,我希望将NaN值分配给大小为(j,k,l)的数组,只要维度为j< k或j<湖我如何最有效地完成这项工作?
答案 0 :(得分:4)
您可以使用do {
let data = try JSONSerialization.data(withJSONObject:testdict, options: JSONSerialization.WritingOptions.prettyPrinted)
let str = String(data:data, encoding: String.Encoding.utf8)
print(str)
} catch {
print("JSON error")
}
有效地执行此操作:
bsxfun
在MATLAB r2016b或Octave中,您只需编写:
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;
对矩阵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)
答案 1 :(得分:3)
使用花哨的vecotization:
info.php
如果你没有足够的RAM(或者不想使用它),那么最好的选择就是循环:
% 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;
这可能会慢一些,但不需要任何额外的内存。