Indexing with two matrices

4 Ansichten (letzte 30 Tage)
Tchilabalo
Tchilabalo am 21 Jan. 2020
Kommentiert: Tchilabalo am 23 Jan. 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

Akzeptierte Antwort

KALYAN ACHARJYA
KALYAN ACHARJYA am 21 Jan. 2020
Bearbeitet: KALYAN ACHARJYA am 21 Jan. 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 Kommentare
Tchilabalo
Tchilabalo am 21 Jan. 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 am 21 Jan. 2020
Bearbeitet: KALYAN ACHARJYA am 21 Jan. 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Stephen23
Stephen23 am 22 Jan. 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 Kommentar
Tchilabalo
Tchilabalo am 23 Jan. 2020
Thanks Stephen for your answer. It is working now.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by