3D Array Rastering
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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
Respuesta aceptada
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
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
el 29 de Mayo de 2020
Editada: Dillon Kopecky
el 29 de Mayo de 2020
Más respuestas (0)
Ver también
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!