Clear Filters
Clear Filters

get p*(q*m) matrix from m*n matrix and p*q indexing matrix

1 view (last 30 days)
hey everyone,
is there an elegant way to get the following:
C=rand(8,n) %given
index=[...
1 5 1 2 3 4
2 6 2 3 4 1
3 7 6 7 8 5
4 8 5 6 7 8
1 5 1 2 3 4];
X=[...
C(1,1) C(5,1) C(1,1) ... ... C(4,1) C(1,n) C(5,n) C(1,n) ... ... C(4,n)
C(2,1) C(6,1) C(2,1) ... ... C(1,1) C(2,n) C(6,n) C(2,n) ... ... C(1,n)
C(3,1) C(7,1) C(6,1) ... ... C(5,1) ... C(3,n) C(7,n) C(6,n) ... ... C(5,n)
C(4,1) C(8,1) C(5,1) ... ... C(8,1) C(4,n) C(8,n) C(5,n) ... ... C(8,n)
C(1,1) C(5,1) C(1,1) ... ... C(4,1) C(1,n) C(5,n) C(1,n) ... ... C(4,n)
]
X=C(index,:)
gives the information but not arranged as desired. it is for plotting cubes by edge coordinates in 3d with patch command.
thanks for any help!

Accepted Answer

Davide Masiello
Davide Masiello on 17 Oct 2022
Edited: Davide Masiello on 17 Oct 2022
Something like this?
n = 3;
C = rand(8,n)
C = 8×3
0.8036 0.1626 0.1875 0.8851 0.4522 0.1023 0.8075 0.3073 0.0316 0.3548 0.5842 0.8018 0.6769 0.1753 0.1741 0.8239 0.0872 0.1524 0.0985 0.8049 0.5961 0.6590 0.9066 0.9541
index=[...
1 5 1 2 3 4
2 6 2 3 4 1
3 7 6 7 8 5
4 8 5 6 7 8
1 5 1 2 3 4];
X = reshape(C(index(:),1:n),size(index,1),size(index,2)*n)
X = 5×18
0.8036 0.6769 0.8036 0.8851 0.8075 0.3548 0.1626 0.1753 0.1626 0.4522 0.3073 0.5842 0.1875 0.1741 0.1875 0.1023 0.0316 0.8018 0.8851 0.8239 0.8851 0.8075 0.3548 0.8036 0.4522 0.0872 0.4522 0.3073 0.5842 0.1626 0.1023 0.1524 0.1023 0.0316 0.8018 0.1875 0.8075 0.0985 0.8239 0.0985 0.6590 0.6769 0.3073 0.8049 0.0872 0.8049 0.9066 0.1753 0.0316 0.5961 0.1524 0.5961 0.9541 0.1741 0.3548 0.6590 0.6769 0.8239 0.0985 0.6590 0.5842 0.9066 0.1753 0.0872 0.8049 0.9066 0.8018 0.9541 0.1741 0.1524 0.5961 0.9541 0.8036 0.6769 0.8036 0.8851 0.8075 0.3548 0.1626 0.1753 0.1626 0.4522 0.3073 0.5842 0.1875 0.1741 0.1875 0.1023 0.0316 0.8018
  2 Comments
Daniel Neubauer
Daniel Neubauer on 17 Oct 2022
thanks for the reply.
however, is there a way without looping? my data is rather big so i'd prefer not to loop.
Davide Masiello
Davide Masiello on 17 Oct 2022
I understand, I have changed my answer.
I believe it should work that way either.

Sign in to comment.

More Answers (0)

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!