# Basic Vectorization Question (speed required)

1 visualización (últimos 30 días)
Matlab2010 el 22 de Nov. de 2013
Comentada: Matlab2010 el 22 de Nov. de 2013
I have a 2D matrix of data. I have an index to reduce that 2D matrix to a 1D matrix.
How can I do it without using a for loop? Ie by vectorization as it needs to be super quick.
thanks
Z = rand(5,100); %matrix of data
IDY = randi([1 5], [1,100]); %index into that matrix
X = NaN(size(Z,2),1); %pre allocate
X = Z(IDY,:); %this fails as it does not generate a 1D matrix (vector) as required
this is how I can do it using a loop
X2 = NaN(size(Z,2),1);
for i = 1: size(X,1)
X2(i) = Z(IDY(i),i);
end
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

Iniciar sesión para comentar.

Azzi Abdelmalek el 22 de Nov. de 2013
Z = rand(5,100); %matrix of data
IDY = randi([1 5], [1,100]); %index into that matrix
X = NaN(size(Z,2),1); %pre allocate
X = Z(IDY,:)
X3=Z(sub2ind(size(Z),IDY,1:size(Z,2)))
##### 1 comentarioMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos
Matlab2010 el 22 de Nov. de 2013
thats a great answer. thank you!
PS have never used sub2ind before but will read up on it now

Iniciar sesión para comentar.

### Más respuestas (1)

Image Analyst el 22 de Nov. de 2013
To get all of Z in row-major order, do:
X = Z(:);
To get random ordering, like your code attempted to do, try this:
Z = rand(5,100) %matrix of data
randomIndexes = randperm(numel(Z)) %index into that matrix
X = Z(randomIndexes)
##### 1 comentarioMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos
Matlab2010 el 22 de Nov. de 2013
Editada: Matlab2010 el 22 de Nov. de 2013
I must have explained my question very badly.
I have an index of size 1*T (in my example T = 100). Each value in the index can take a value 1: K (K = 5) in my example. This is an index value for each row in the K*T data matrix. I wish to apply the index to generate a matrix 1*T in size.
Your example code generates an index of values 1: K*T and then produces an a matrix of K*T in size.
thanks

Iniciar sesión para comentar.

### Categorías

Más información sobre Matrix Indexing 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