Four indexing matrix

I have a matrix nxn, each element is described by a 2 index number (i.e. one number for the column, one for the row). The problem is that i want to access this matrix by a four digit indexing. Is there a way to do that?

3 commentaires

Oleg Komarov
Oleg Komarov le 21 Juil 2011
What do you mean? You want to retrieve two points at the same time?
Nikolaos
Nikolaos le 22 Juil 2011
no, i want to access a matrix not by 2 digits indexing but by 4 index indexing. For example i want to map A(k,l,m,n)->p(i,j) {where i==row, j=column of p matrix }
Jan
Jan le 22 Juil 2011
There is an infinite number of possibilities to map "A(k,l,m,n)->p(i,j)". Please specify how {k,l,m,n} and {i,j} are connected.

Connectez-vous pour commenter.

 Réponse acceptée

Nikolaos
Nikolaos le 22 Juil 2011

0 votes

Ok, i made it. So, for a given matrix "pall" i go to a matrix "alpha(i,j,k,l)". For example: alpha(1,1,1,1)=pall(1,1)=1 alpha(2,2,2,2)=pall(4,4)=16 alpha(1,1,1,2)=pall(1,2)=2 .. p.s. If you have a faster solution please tell me. Thank you all
%this is the actual algorithm % pall=([1 2 3 4;5 6 7 8; 9 10 11 12; 13 14 15 16]); k=0 for n1=1:4 for n2=1:4 k=k+1 temp(k)=pall(n1,n2) end end k=0 alpha=zeros(2,2,2,2) for n3=1:2 for n4=1:2 for n5=1:2 for n6=1:2 k=k+1 alpha(n3,n4,n5,n6)=temp(k) end end end end %

5 commentaires

Nikolaos
Nikolaos le 22 Juil 2011
pall=([1 2 3 4;5 6 7 8; 9 10 11 12; 13 14 15 16]);
k=0
for n1=1:4
for n2=1:4
k=k+1
temp(k)=pall(n1,n2)
end
end
k=0
alpha=zeros(2,2,2,2)
for n3=1:2
for n4=1:2
for n5=1:2
for n6=1:2
k=k+1
alpha(n3,n4,n5,n6)=temp(k)
end
end
end
end
Andrei Bobrov
Andrei Bobrov le 22 Juil 2011
is better
permute(reshape(pall,[2 2 2 2]),[2,1,3,4])
Jan
Jan le 22 Juil 2011
@Nikolaos: Please use code-formatting either by starting the code lines with 2 spaces or by marking the code section with the mouse and hitting the "{} Code" button in this page.
Nikolaos
Nikolaos le 22 Juil 2011
Ok thanks a lot.. what needs to be change if for example the pall matrix is larger? fe 16x16
Walter Roberson
Walter Roberson le 22 Juil 2011
Comments cannot be formatted yet, unfortunately.

Connectez-vous pour commenter.

Plus de réponses (2)

Friedrich
Friedrich le 21 Juil 2011

0 votes

Hi,
I am not sure what you mean with 4digit indexing. Do you want a 4d matrix?
>> a = zeros(3,3,3,3);
>> a(1,2,1,3)
ans =
0
Or do you like to pass 2 pairs of indices?
a = [1 2; 3 4]
%try to access 1,1 and 1,2
ind = sub2ind(size(a),[1 1],[1 2])
a(ind)
ans =
1 2

1 commentaire

Nikolaos
Nikolaos le 22 Juil 2011
i want to access a matrix not by 2 digits indexing but by 4 index indexing. For example i want to map A(k,l,m,n)->p(i,j) {where i==row, j=column of p matrix }

Connectez-vous pour commenter.

Jan
Jan le 22 Juil 2011

0 votes

One example:
A = rand(3, 4, 5, 6);
p = reshape(A, 12, 30);
disp(A(2,3,4,5))
disp(p(8, 24))
Does this match your needs? Then SUB2IND and IND2SUB might help.

5 commentaires

Nikolaos
Nikolaos le 22 Juil 2011
ok, i am a bit new to matlab, could be so kind of giving me an example using as a matrix the pall=([1 2 3 4;5 6 7 8; 9 10 11 12; 13 14 15 16])?
Andrei Bobrov
Andrei Bobrov le 22 Juil 2011
pall=[1 2 3 4;5 6 7 8; 9 10 11 12; 13 14 15 16]
a = zeros(2,2,2,2)
a(:) = pall
Jan
Jan le 22 Juil 2011
a = reshape(pall, 2,2,2,2);
Nikolaos
Nikolaos le 22 Juil 2011
great thanks a lot
Nikolaos
Nikolaos le 5 Oct 2011
but what if i have a matrix "pall" 100x100, or nxn .. ??
Thanx in andanve.

Connectez-vous pour commenter.

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by