Indexing with two matrices

7 visualizzazioni (ultimi 30 giorni)
Tchilabalo
Tchilabalo il 21 Gen 2020
Commentato: Tchilabalo il 23 Gen 2020
I have two matrices A(1000 by 100) and B(10 by 100).
A=
1 4 20
3 5 15
2 1 24
7 9 42
B=
3 4 15
7 1 42
I want to return a matrix C such that, for each column of B i find the indexes in the coresponding column in A.
For this case:
C=
2 1 2
4 3 4
I have tried the code below, but i am not getting what I want.
for i=1:size(A,2)
C(:,i)=intersect(A(i),B(i));
end

Risposta accettata

KALYAN ACHARJYA
KALYAN ACHARJYA il 21 Gen 2020
Modificato: KALYAN ACHARJYA il 21 Gen 2020
A=[1 4 20
3 5 15
2 1 24
7 9 42];
B=[3 4 15
7 1 42];
[r1,c1]=size(B);
c=zeros(r1,c1);
for i=1:r1
for j=1:c1
r=find(B(i,j)==A(:,j))
c(i,j)=r
end
end
c
#
c =
2 1 2
4 3 4
  2 Commenti
Tchilabalo
Tchilabalo il 21 Gen 2020
Thanks Kalyan for your answer. The code is working but i have on special case: what if i have one value repeated multiple times in a column? Here is an example:
A=[1 4 20
3 5 15
2 1 24
2 5 15
3 4 15
7 9 42];
B=[3 4 15
7 1 42];
[r1,c1]=size(B);
c=zeros(r1,c1);
KALYAN ACHARJYA
KALYAN ACHARJYA il 21 Gen 2020
Modificato: KALYAN ACHARJYA il 21 Gen 2020
but i have on special case: what if i have one value repeated multiple times in a column
The logic, you have to find out, we are here to help you to implementation in MATLAB.

Accedi per commentare.

Più risposte (1)

Stephen23
Stephen23 il 22 Gen 2020
>> [C,~] = find(bsxfun(@eq,permute(A,[1,3,2]),permute(B,[3,1,2])));
>> C = reshape(C,size(B))
C =
2 1 2
4 3 4
  1 Commento
Tchilabalo
Tchilabalo il 23 Gen 2020
Thanks Stephen for your answer. It is working now.

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by