Memory problem when accessing and copying the 3D array elements by subscripts

1 visualizzazione (ultimi 30 giorni)
I am trying to access/copy values from an image 3D array to another 3D array using the subcripts (rows and columns). I am trying to avoid the for loop. With for loop this works fine. The size of the rows and columns is 121020 x 1. But I am getting a memory error as below:
Requested 121020x121020x3 (40.9GB) array exceeds maximum array size preference. Creation of arrays greater than this limit may take a
long time and cause MATLAB to become unresponsive.
The code snippet is below
% Find boundary of the cylindrical projection
[row,col] = find(ximg > 0 & ximg <= xdim & yimg > 0 & yimg <= ydim);
out(row,col,:) = image(row,col,:);
Any help to make it without for loop is appreciated!
  3 Commenti

Accedi per commentare.

Risposta accettata

Matt J
Matt J il 2 Ago 2021
Modificato: Matt J il 2 Ago 2021
The better way would be to avoid using find():
region=(ximg > 0 & ximg <= xdim & yimg > 0 & yimg <= ydim);
imtmp=reshape(image,[],size(image,3));
outtmp=reshape(out,[],size(out,3));
outtmp(region,:)=imtmp(region,:);
out(:)=outtmp(:); clear outtmp imtmp

Più risposte (0)

Categorie

Scopri di più su Write C Functions Callable from MATLAB (MEX Files) in Help Center e File Exchange

Prodotti


Release

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by