Effacer les filtres
Effacer les filtres

How to find index in a single array?

1 vue (au cours des 30 derniers jours)
J Yadav
J Yadav le 7 Jan 2019
Commenté : J Yadav le 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.

Réponse acceptée

Stephen23
Stephen23 le 8 Jan 2019
Modifié(e) : Stephen23 le 8 Jan 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 commentaires
Stephen23
Stephen23 le 8 Jan 2019
@SHUBHAM GUPTA: you are right, I fixed that now.
J Yadav
J Yadav le 8 Jan 2019
I have changed the question slightly, bbut your answer to use setdiff is helpful. Thanks,

Connectez-vous pour commenter.

Plus de réponses (1)

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

Connectez-vous pour commenter.

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by