# Basic Vectorization Question (speed required)

1 vue (au cours des 30 derniers jours)
Matlab2010 le 22 Nov 2013
Commenté : Matlab2010 le 22 Nov 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 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Réponse acceptée

Azzi Abdelmalek le 22 Nov 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 commentaireAfficher -1 commentaires plus anciensMasquer -1 commentaires plus anciens
Matlab2010 le 22 Nov 2013
thats a great answer. thank you!
PS have never used sub2ind before but will read up on it now

Connectez-vous pour commenter.

### Plus de réponses (1)

Image Analyst le 22 Nov 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 commentaireAfficher -1 commentaires plus anciensMasquer -1 commentaires plus anciens
Matlab2010 le 22 Nov 2013
Modifié(e) : Matlab2010 le 22 Nov 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

Connectez-vous pour commenter.

### Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by