Удалить циклы из кода?
Можно ли удалить все циклы из следующего кода и вычислить значения 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
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])
- может быть, порядок не совсем тот же.
Здесь можно использовать простой
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(:).';