是否可以从以下代码中删除所有循环,并使用向量计算k
值。
index = 0;
for i = 1.1:0.1:2.5
for j = 200:300:3000
for z = 1:14:14000
index = index + 1;
k(index) = (log(i) *pi/(sqrt(j)))* exp(z);
end
end
end
答案 0 :(得分:2)
像这样的东西
[I, J, Z] = meshgrid(1.1 : 0.1 : 2.5, 200 : 300 : 3000, 1 : 14 : 14000);
k = log(I) .* pi ./ sqrt(J) .* exp(Z);
k = reshape(permute(k, [3 2 1]), 1, []);
ps:你确定范围吗? exp(14000)无法以常规精度计算。
并检查此步骤permute(k, [3 2 1])
- 订单可能不完全相同。
答案 1 :(得分:1)
你可以在这里使用简单的matrix multiplication
,这必须快速有效,因为在MATLAB
-
array1 = 1.1:0.1:2.5;
array2 = 200:300:3000;
array3 = 1:14:14000;
mult1 = (log(array1).')*(pi./(sqrt(array2))); %//'
mult2 = mult1(:)*exp(array3);
out = mult2(:).';