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

1 回表示 (過去 30 日間)
Ben Ked
Ben Ked 2021 年 10 月 9 日
コメント済み: Ben Ked 2021 年 10 月 13 日
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 件のコメント
Matt J
Matt J 2021 年 10 月 10 日
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 2021 年 10 月 10 日
編集済み: Ben Ked 2021 年 10 月 10 日
Note: the letters within the matrices are just for labelling the rows

サインインしてコメントする。

採用された回答

Matt J
Matt J 2021 年 10 月 10 日
編集済み: Matt J 2021 年 10 月 10 日
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
  1 件のコメント
Ben Ked
Ben Ked 2021 年 10 月 13 日
Thank you very much, this is exactly what I need.
Best regards,

サインインしてコメントする。

その他の回答 (2 件)

Matt J
Matt J 2021 年 10 月 9 日
編集済み: Matt J 2021 年 10 月 9 日
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 件のコメント
Ben Ked
Ben Ked 2021 年 10 月 9 日
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

サインインしてコメントする。


David Hill
David Hill 2021 年 10 月 9 日
g=[];
[a,b]=size(indices);
for k=1:b
g=[g,vector(repmat(indices(:,k),1,b)+[0:a:(b-1)*a])];
end
  1 件のコメント
Ben Ked
Ben Ked 2021 年 10 月 10 日
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

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by