How to find index in a single array?

Hi,
I have two column vectors A=(3, 4, 6, 9, 12, 34, 56, 99, 105, 190)' and B=(4, 12, 34, 56)' both are sorted in increasing order. And a bbig matrix D of size mxn, where m is no. of rows in A.
Purpose: is to divide the matrix D into two segments ,
a) matrix E which has 4 rows (=number of rows in B) which are the 2nd, 5th, 6th.. rows of matrix D
and
b) matrix F which has 6 rows (= numbers of rows in A minus number of rows in B) which are 1st, 3rd, 4th, 6th, ...etc rows of D,
So basically the row numbers given bby A has to divided into B and notB.
Here's what I am doing:
I need to find out the placement of each element of B in A. So I am using :
for i=size(B,1)
C(i,1) = find(B(i,1)==A)
end
Question 1: Is there a way to vectorise this process and avoid the LOOP
After that I want to locate the row indexed by B and not B in a mXn matrix D, so I am using
rowEindex=1
rowFindex=1
for j=1:size(B,1)
if A(j,1)==B
E(rowEindex,:) = D(j,:)
rowEindex = rowEindex+1
else
E(rowFindex,:) = D(j,:)
rowFindex = rowFindex+1
end
Question 2: Is there a way to speed up this process, again without using the LOOP
many thanks for your response.

 Risposta accettata

Stephen23
Stephen23 il 8 Gen 2019
Modificato: Stephen23 il 8 Gen 2019

1 voto

Simpler:
A = [3;4;6;9;12;34;56;99;105;190];
B = [4;12;34;56];
D = randi(999,200,7); % fake data
E = D(B,:);
F = D(setdiff(A,B),:);

3 Commenti

You might wanna edit line-4 by ,
E=D(B,:);
Cheers.
@SHUBHAM GUPTA: you are right, I fixed that now.
I have changed the question slightly, bbut your answer to use setdiff is helpful. Thanks,

Accedi per commentare.

Più risposte (1)

Try this :
A=[3, 4, 6, 9, 12, 34, 56, 99, 105, 190]';
B=[4, 12, 34, 56]' ;
D=[1:200;1:200;1:200;1:200]';
[val,ind]=intersect(A,B);
E=D(val,:);
A(ind)=[];
F=D(A,:);
I hope this helps.

1 Commento

I have changed the question slightly, bbut your answer to use intersect is helpful. Thanks,

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by