Dimensional problem in for loop.

2 visualizaciones (últimos 30 días)
Xiaohan Du
Xiaohan Du el 8 de Nov. de 2017
Comentada: Greg el 8 de Nov. de 2017
Hi all,
Imagine there is function which takes a matrix as input, perform some operations to each element, and gives an output of same dimension matrix. The dimension of the input matrix can be random. For example:
clear; clc;
% the 1d case.
inpt1d = [1 2 3]';
otpt1d = zeros(3, 1);
for i = 1:3
% the operation is square root.
otpt1d(i) = sqrt(inpt1d(i));
end
% the 2d case.
inpt2d = [1 2 3; 4 5 6; 7 8 9]';
otpt2d = zeros(3, 3);
for i = 1:3
for j = 1:3
otpt2d(i, j) = sqrt(inpt2d(i, j));
end
end
Here in the example I manually set i and j for 2d case. However if I want the input to suit any dimension, I cannot set the index manually any more. So for this kind of problem, if I'd like to deal with any dimensions with for loop, how should I do it?
Thanks!
  1 comentario
Greg
Greg el 8 de Nov. de 2017
Editada: Greg el 8 de Nov. de 2017
MATLAB inherently understands linear-indexing, do some Google searching on those terms and you should learn you only ever need a single loop (with maybe a tiny bit of slick pre-allocation).

Iniciar sesión para comentar.

Respuesta aceptada

KL
KL el 8 de Nov. de 2017
Editada: KL el 8 de Nov. de 2017
EDITED
First you should make sure if loop is required at all in the first place, if yes then I would suggest linear indexing and reshape.
For example
A = rand(3,3,3);
B = A(:);
now it's just a column vector. you could use a single loop with numel(). and once you are done, you could reshape it like
C = reshape(B,size(A))
  3 comentarios
KL
KL el 8 de Nov. de 2017
Ah yes, I totally misread it, thanks Greg.
Greg
Greg el 8 de Nov. de 2017
The "tiny bit of slick pre-allocation" I referred to in my comment to the original question negates the reshape:
A = rand(3,3,3);
B = 0.*A; % or B = NaN.*A;

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by