Effacer les filtres
Effacer les filtres

using find(ismember) instead of a loop?

7 vues (au cours des 30 derniers jours)
wesso Dadoyan
wesso Dadoyan le 4 Oct 2016
Modifié(e) : Guillaume le 4 Oct 2016
I have matrix B which is has around 1 million rows and Matrix A which has 800,000 rows. I want to match the observations of A and B and then assign to A the observations of B that matches. I tried a loop which taking forever in terms of time. I am wondering if I can do it in one shot using find(ismember). below are my codes:
for i=1:size(B,1)
x0=find(A(:,2)==B(i,2) & A(:,1)==B(i,1));
B(i,8)=A(x0,9);
end
  2 commentaires
Matt J
Matt J le 4 Oct 2016
Modifié(e) : Matt J le 4 Oct 2016
I suspect you haven't shown your actual code, making it hard to interpret what you are trying to do. In the posted code, you are comparing columns of A with rows of B which should be producing errors like the following, unless you are using R2016b
>> [1 2 3] == [1;2;3]
Error using ==
Matrix dimensions must agree.
Also, the code you've shown uses only the 1st, 2nd, and 9th column of A. So, why is it significant that "A has 800000 rows"?
wesso Dadoyan
wesso Dadoyan le 4 Oct 2016
I am not receiving any error. the size is significant to show that the loop takes a lot of time . i need a one step approach rather than a loop.

Connectez-vous pour commenter.

Réponse acceptée

Guillaume
Guillaume le 4 Oct 2016
Modifié(e) : Guillaume le 4 Oct 2016
Note that the find was completely unnecessary in your original example, you could just have used the logical array returned by the comparison:
x0=A(:,2)==B(i,2) & A(:,1)==B(i,1);
B(i,8)=A(x0,9); %would have worked exactly the same with marginal speed gain.
To answer your question:
[found, Arow] = ismember(B(:, 1:2), A(:, 1:2), 'rows');
B(found, 8) = A(Arow(found), 9);

Plus de réponses (0)

Catégories

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

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by