Effacer les filtres
Effacer les filtres

Info

Cette question est clôturée. Rouvrir pour modifier ou répondre.

how to speed up this nestled for loop

3 vues (au cours des 30 derniers jours)
Jeroen
Jeroen le 17 Fév 2012
Clôturé : MATLAB Answer Bot le 20 Août 2021
Hi everybody,
I need to make this code faster:
for i=1:n1*n2*n3;
x1 = M(i,1);
y1 = M(i,2);
ex1 = M(i,4);
ey1 = M(i,5);
ez1 = M(i,6);
if x1 <= 70 && x1 >= -70 && y1 <= 70 && y1 >= -70;
ex2 (i) = 0;
ey2 (i) = 0;
ez2 (i) = 0;
else
ex2 (i) = ex1;
ey2 (i) = ey1;
ez2 (i) = ez1;
end
end
What is the best way to do that?

Réponses (3)

Andrei Bobrov
Andrei Bobrov le 17 Fév 2012
try this is code
exyz = zeros(size(M(:,4:6)));
t = all(M(:,1:2) >= -70 & M(:,1:2) <= 70,2);
exyz(t,:) = M(t,4:6);
ADD
so?
exyz2 = zeros(size(M(:,4:6)).*[1 2]);
t = all(M(:,1:2) >= 70 & M(:,1:2) <= 70,2);
exyz2(:,1:3) = M(:,4:6);
exyz2(t,4:6) = M(t,4:6);
ADD2
out = M;
t = all(M(:,1:2) >= 70 & M(:,1:2) <= 70,2);
out(t,4:6) = out(t,4:6);

Jeroen
Jeroen le 17 Fév 2012
Thank Andrei Bobrov for your fast answer. But this yields a 235238 by 3 matrix and it needs to be a 235238 by 6 matrix. Anyway with your tips I can probably do something
  1 commentaire
Andrei Bobrov
Andrei Bobrov le 17 Fév 2012
in our case:
exyz2 == [ex2 ey2 ez2]

Jeroen
Jeroen le 17 Fév 2012
Okay thank you for your respons! But this is not what i want. i have matrix M. That matrix has 6 rows and 235238 columns. Now if there is a value in that matrix that is below -70 or above 70 that element has to be zero.
The matrix that i create looks like: M = [M(:,1),M(:,2),M(:,3),ex2,ey2,ez2]; With ex2,ey2,ez2 the values that i have in the for loop.
Sorry for the late respons. I did not got a mail.
  1 commentaire
Andrei Bobrov
Andrei Bobrov le 17 Fév 2012
see ADD2 in my answer

Cette question est clôturée.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by