Removing nested for loops for quicker time

1 vue (au cours des 30 derniers jours)
Sanghyun Lee
Sanghyun Lee le 11 Sep 2019
Commenté : Bob Thompson le 12 Sep 2019
I need help removing the nested for loop in this code.
The code right now has imagesList, totalDistance which are 4D arrays, and finalPixels is a 3D array and index is a 2D array.
The code goes through each of the rows and columns to replace them with colours in the finalPixels which are each stored in its own 2D array which (:,:,1) is red (:,:,2) is green and (:,:,3) is blue.
[~,index]=max(totalDistance,[],4);
[rows,cols]=size(index);
finalPixels=zeros(rows,cols,3);
for i=1:rows
for j=1:cols
finalPixels(i,j,1)=imagesList(i,j,1,index(i,j));
finalPixels(i,j,2)=imagesList(i,j,2,index(i,j));
finalPixels(i,j,3)=imagesList(i,j,3,index(i,j));
end
end

Réponses (2)

Bob Thompson
Bob Thompson le 11 Sep 2019
I'm shooting in the dark a bit on this one, but I think you can get rid of both loops. The only thing I'm not entirely sure about is whether the indexing for the max 4th dimension value will work correctly.
finalPixels(:,:,1:3)=imagesList(:,:,1:3,index);
Without a sample of data I wouldn't be able to test it, but feel free to post any problems you have.
  2 commentaires
Sanghyun Lee
Sanghyun Lee le 12 Sep 2019
doens't seem to work
the error i get is this:(its translated so it might be wrong)
The requested 557x495x3x275715 (212.4 GB) array exceeds the maximum array size preference. If you create an array that is larger than this limit, it can take a long time and MATLAB may stop responding. For more information, see Array size limit or Preferences panel.
Bob Thompson
Bob Thompson le 12 Sep 2019
Ok, so it's trying to use each of the elements in the 2D index array. I thought that might happen, but I had hoped it wouldn't. Unfortunately, I cannot think of another way to avoid using loops. It doesn't mean it doesn't exist, I just don't know it.

Connectez-vous pour commenter.


Bruno Luong
Bruno Luong le 11 Sep 2019
Modifié(e) : Bruno Luong le 11 Sep 2019
I know
  1. totalDistance third dimension is a singleton
  2. p, the third dimension imagesList of is 3, and
  3. other dimensions of totalDistance and imagesList match
which are all important piece of information and you must learn to clearly state when asking question for people who can understand
[~,index] = max(totalDistance,[],4);
[m,n,p,~] = size(imagesList);
x = m*n*p;
finalPixels = reshape(imagesList((1:x)'+x*(repmat(index(:)-1,p,1))),[m,n,p]);

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by