3D Array Rastering

3 visualizaciones (últimos 30 días)
Dillon Kopecky
Dillon Kopecky el 28 de Mayo de 2020
Editada: Dillon Kopecky el 29 de Mayo de 2020
I am attempting to raster scan DMD mirrors by inputing a 3D array. I would like the array (for the number of mirrors along one side, n = 2) to look like: [[1,0;0,0],[0,1;0,0],[0,0;1,0],[0,0;0,1]] (i.e. a row major order scan of the mirrors). I intend to scale this array and my initial attempt hasn't been succesful. How do I create this array?
N = 4;
Array3D = zeros(2,2,N);
for row=1:2
for col=1:2
for k=1:N
Array3D(row,col,k) = 1;
end
end
end
  1 comentario
darova
darova el 29 de Mayo de 2020
What about eye?

Iniciar sesión para comentar.

Respuesta aceptada

Matt J
Matt J el 29 de Mayo de 2020
Editada: Matt J el 29 de Mayo de 2020
I'm not sure from your description how this should generalize for different N, but perhaps this is what you want:
>> N=2; Array3D=reshape(eye(N^2),N,N,[])
Array3D(:,:,1) =
1 0
0 0
Array3D(:,:,2) =
0 0
1 0
Array3D(:,:,3) =
0 1
0 0
Array3D(:,:,4) =
0 0
0 1
  2 comentarios
Matt J
Matt J el 29 de Mayo de 2020
Editada: Matt J el 29 de Mayo de 2020
Incidentally, for large N, the array you are trying to building (assuming I've understand the goal correctly) will be highly RAM-consuming. You can reduce memory consumption by using my ndSparse class (Download). E.g.,
>> N=30; Array3D=reshape(eye(N^2),[N,N,N^2]); SparseArray3D=ndSparse(speye(N^2),[N,N,N^2]);
>> whos *Array3D
Name Size Kilobytes Class Attributes
Array3D 30x30x900 6329 double
SparseArray3D 30x30x900 22 ndSparse
>> isequal(Array3D,SparseArray3D)
ans =
logical
1
Dillon Kopecky
Dillon Kopecky el 29 de Mayo de 2020
Editada: Dillon Kopecky el 29 de Mayo de 2020
Excellent! Thank you! I knew I must have been overcomplicating the solution. Thanks for the heads up regarding optimization and providing your code.
I needed row major operation which may not have initially been clear. The following code yields the correct ordering in case someone is interested.
N=3;
A = eye(N^2);
Array3D=reshape(A',N,N,[]);
B = permute(Array3D,[2 1 3]);

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Data Type Conversion en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by