Apply the same matrix index to another matrix (bootstrap for matrix processes)

1 view (last 30 days)
Hello,
I have a matrix index INDICES (t=173;k=30) I want to apply to the second column of a matrix X (t=173;k=6)
I have tried data=X(2,indices) but it doesn't work. When I code data=X(indices) I have my new matrix but with the index applied to the first column of X. The output is a data matrix (t=173;k;30) but with column data from the first column of X only
If possible I would like to get as an output the matrix where the index matrix is applied to all column (a matrix t=173; k=30*6)
I think it is simple, but I can't find the solution.
Thank you
  12 Comments
Matt J
Matt J on 10 Oct 2021
Ben Ked's comment moved here:
Here an example:
data =
5 (z)
6 (p)
7 (r)
x =
7 3 (z)
6 9 (p)
2 4 (r)
indices =
2 (p) 1 2
3 (r) 2 1
1 (z) 3 3
vector = [data x]
% (p) = 2 because it corresponds to position row2 of each column
g = vector(indices)
% g Output desired : indices give the position to pick in each matrix/vector
6 6 9 (p) 5 7 3 6 6 9
7 2 4 (r) 6 6 9 5 7 3
5 7 3 (z) 7 2 4 7 2 4
Ben Ked
Ben Ked on 10 Oct 2021
Edited: Ben Ked on 10 Oct 2021
Note: the letters within the matrices are just for labelling the rows

Sign in to comment.

Accepted Answer

Matt J
Matt J on 10 Oct 2021
Edited: Matt J on 10 Oct 2021
Data=[5 7 3
6 6 9
7 2 4];
indices=[ 2 1 2
3 2 1
1 3 3];
tmp=num2cell(Data,2);
output=cell2mat(tmp(indices))
output = 3×9
6 6 9 5 7 3 6 6 9 7 2 4 6 6 9 5 7 3 5 7 3 7 2 4 7 2 4

More Answers (2)

Matt J
Matt J on 9 Oct 2021
Edited: Matt J on 9 Oct 2021
I want to apply to the second column of a matrix X (t=173;k=6)...I have tried data=X(2,indices) but it doesn't work
You seem to have columns and rows mixed up. You should have,
data=X(indices,2)
  1 Comment
Ben Ked
Ben Ked on 9 Oct 2021
Thank you Matt J,
this gives a vector of 1 column with 5190 rows (which corresponds to 173*30). The desired outcome would be 173 rows and 30 columns.
Thank you one more time for your guidance

Sign in to comment.


David Hill
David Hill on 9 Oct 2021
g=[];
[a,b]=size(indices);
for k=1:b
g=[g,vector(repmat(indices(:,k),1,b)+[0:a:(b-1)*a])];
end
  1 Comment
Ben Ked
Ben Ked on 10 Oct 2021
Dear David,
Thank you for your suggestion.
It doesnt work, I have modified my message above to make it clearer (I hope !).
We should have nbcol of "g" = nbcol of "indices" times nbcol of "indices) --> 9 in the above exemple
Thank you once again

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!