MATLAB Answers

J Yadav
0

How to find index in a single array?

Asked by J Yadav
on 7 Jan 2019
Latest activity Commented on by J Yadav
on 8 Jan 2019
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.

  0 Comments

Sign in to comment.

2 Answers

Answer by Stephen Cobeldick on 8 Jan 2019
Edited by Stephen Cobeldick on 8 Jan 2019
 Accepted Answer

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 Comments

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,

Sign in to comment.


Answer by SHUBHAM GUPTA on 8 Jan 2019

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 Comment

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

Sign in to comment.