MATLAB Answers

"symmetrical" rows of matrix

5 views (last 30 days)
I have integer matrix A (nA x c) with even number of columns (e.g. mod(c,2) = 0) and unique rows.
How to effectivelly (by speed and memory optimized function "symmetricRows") find the "symmetric" rows of matrix A iA1 and iA2, where "symmetric" rows iA1 and iA2 are defined as:
all(A(iA1,1:end/2) == A(iA2,end/2+1:end) & A(iA1,end/2+1:end) == A(iA2,1:end/2),2) = true
Example:
A = [1 1 1 1;
2 2 2 2;
1 2 3 4;
4 3 2 1;
2 2 3 3;
3 4 1 2;
3 3 2 2]
[iA1, iA2] = symmetricRows(A)
iA1 =
1
2
3
5
iA2 =
1
2
6
7
Typical size of matrices A: nA ~ 1e4-1e6, c ~ 60 - 120
The problem is motivated by pre-processing of large dataset, where "symmetrical" rows are irrelevant from the point of user defined distance metric.

  0 Comments

Sign in to comment.

Accepted Answer

Michal Kvasnicka
Michal Kvasnicka on 11 Feb 2020
Edited: Michal Kvasnicka on 11 Feb 2020
I present the best solution so far:
d = ~pdist2(A(:,1:end/2), A(:,end/2+1:end));
[iA1, iA2] = find(triu(d & d.'));

  4 Comments

Show 1 older comment
Michal Kvasnicka
Michal Kvasnicka on 11 Feb 2020
On my PC (with 64GB RAM) in a case when matrix A is in class "single" I am able to process A ~ [1e5,1e2] matrix in reasonable time (cca 30 seconds).
I think that only useful solution will be based on any kind of process in the chunks, but I have no idea what type of in-loop processing will be best in my case.
But yes, you are right, the problem is very challenging...
the cyclist
the cyclist on 11 Feb 2020
Yeah, I should have mentioned that I did my testing on MATLAB Online, so it's probably not the most powerful platform. :-)
Michal Kvasnicka
Michal Kvasnicka on 11 Feb 2020
Yes, defintely, MATLAB Online is not proper way how to compute any memory or CPU intensive task at all ... :)

Sign in to comment.

More Answers (0)

Products


Release

R2019b

Translated by