MATLAB Answers

How do I decrease the time taken by these two for loops. I am taking 30 seconds approximately to run this, and this is in a big for loop that runs for 10000 times.

1 view (last 30 days)
Could anyone please help me with this? I am new to using MATLAB so I have written the code in a layman fashion and I am sure that there are ways to write it better.
The code is below (takes about 30 seconds, depending on size of both the matrices)
for i = 1:1:size(binary_probability_matrix,1)
for j = 1:1:size(matrix,1)
if matrix(j,1:2) == binary_probability_matrix(i,1:2)
matrix(j,3:4) = binary_probability_matrix(i,3:4);
elseif matrix(j,1) == binary_probability_matrix(i,2) && matrix(j,2) == binary_probability_matrix(i,1)
matrix(j,3:4) = binary_probability_matrix(i,3:4);
end
end
end
Basically I am comparing the first two columns of matrix and binary_probability_matrix. If the 1st 2 columns in the matrix are 4 3 ..then I search in the first two columns of binary_probability_matrix for 4 3 OR 3 4.
Similarly, when I am searching for 10 18, I search the first two columns of the binary_probability_matrix for finding 10 18 OR 18 10.
I hope that I was clear in mentioning my question. Please help me with this as the execution time is quite large.
EDIT: order of matrix is 5000x4 and the order of binary_probability_matrix is 2500x7,
Thank you
Jay

Accepted Answer

Jaykumar Vaidya
Jaykumar Vaidya on 28 Nov 2019
Thank you Stephen Cobeldick. I used ismember() function and that is excuting this in no time.
binary_probability_matrix(:,1:2) = sort(binary_probability_matrix(:,1:2),2);
A1 = matrix;
[X,Y] = ismember(matrix(:,[1,2]),binary_probability_matrix(:,[1,2]),'rows');
matrix(X,3:4) = binary_probability_matrix(Y(X),3:4 );
isequal(A1,matrix); %just to check if they are really matched.

  0 Comments

Sign in to comment.

More Answers (0)