Azzera filtri
Azzera filtri

How to make a for faster?

1 visualizzazione (ultimi 30 giorni)
Oliver Lestrange
Oliver Lestrange il 29 Ago 2020
Modificato: Bruno Luong il 29 Ago 2020
Hi,
I've the following code.
ix = ismember(idx_x(:),x(:));
iy = ismember(idx_y(:),y(:));
minimum = min(ix,iy);
for idx_=1:18:length(iy)
for idx=1:18:length(ix)
if minimum(idx)==1
%index =[index;idx];
altura_raio_direto = [altura_raio_direto; heights(idx)];
% saber indices de heights que fazem parte do bresenham
end
iii = iii+1;
disp(iii);
end
end
heights is an array of 90 000 positions, as well as iy and ix.
How can I make this faster?
Thanks!
  1 Commento
Bruno Luong
Bruno Luong il 29 Ago 2020
Modificato: Bruno Luong il 29 Ago 2020
You must think what is your double-loops are looping on. As long as you still see the need of double-loop you are completely off of understanding ISMEMBER and linear indexing.

Accedi per commentare.

Risposte (2)

KSSV
KSSV il 29 Ago 2020
idx_=1:18:length(iy) ;
idx=1:18:length(ix) ;
if min(idx)==1
altura_raio_direto = heights(idx) ;
end
altura_raio_direto = repmat(altura_raio_direto,1,length(idx_1)-1) ;
  1 Commento
Oliver Lestrange
Oliver Lestrange il 29 Ago 2020
I am sorry, I forgot to mention what minimum is.
I've already edit the post.
minimum = min(ix,iy);

Accedi per commentare.


Bruno Luong
Bruno Luong il 29 Ago 2020
Modificato: Bruno Luong il 29 Ago 2020
ix = ismember(idx_x(:),x(:));
iy = ismember(idx_y(:),y(:));
ixy = ix & iy;
idx = 1:18:size(ixy,1);
altura_raio_direto = heights(idx(ixy(idx)));
%altura_raio_direto = repmat(altura_raio_direto,length(idx,1); % outer loop concatenate the same thing over and over

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by