Azzera filtri
Azzera filtri

How to find index in a single array?

1 visualizzazione (ultimi 30 giorni)
J Yadav
J Yadav il 7 Gen 2019
Commentato: J Yadav il 8 Gen 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.

Risposta accettata

Stephen23
Stephen23 il 8 Gen 2019
Modificato: Stephen23 il 8 Gen 2019
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
Stephen23
Stephen23 il 8 Gen 2019
@SHUBHAM GUPTA: you are right, I fixed that now.
J Yadav
J Yadav il 8 Gen 2019
I have changed the question slightly, bbut your answer to use setdiff is helpful. Thanks,

Accedi per commentare.

Più risposte (1)

Shubham Gupta
Shubham Gupta il 8 Gen 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 Commento
J Yadav
J Yadav il 8 Gen 2019
I have changed the question slightly, bbut your answer to use intersect is helpful. Thanks,

Accedi per commentare.

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by