remove non-unique columns even if the sign has changed

I have a 76x16 matrix. Some of the data is repeated and I want to remove repeated columns, which I have tried to do below. However, the numbers are the same but the sign has changed, e.g. columns 8 and 14 are the same data but the signs are reversed (where 8 is +ve, 14 is -ve etc), which my code doesn't acocunt for. The +ve/-ve matters so I cant just abs() the dataset.
I want to keep the first occurence of the repeated columns, where I should be left with 6 columns of data. Can anybody help?
mlag= unique(newca1.','rows','stable').'
mlag(:,max(mlag) == 0) = [];

 채택된 답변

Perhaps this?
load newca.mat
[~, icol, ~] = unique(abs(newca1).', 'rows', 'stable')
icol = 7×1
1 2 3 4 7 8 12
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
mlag = newca1(:,icol)
mlag = 76×7
0 0 0 0 0 0.1250 0 0 0 0 0 0 0.1111 0 0 0 0 0 0 0.1000 0 0 0.0909 0.0909 0.0909 0.0909 0.0909 0 0 0.1667 0.1667 0.1667 0.0833 0.0833 0 0 0.1538 0.1538 0.2308 0.0769 0.0769 0 0 0.3571 0.0714 0.3571 -0.2143 0.1429 0.2857 0 0.1333 0.0667 0.3333 0 0.3333 0.2667 0 0.1333 0.0667 0.3333 -0.0667 0.3333 0.2667 0 0.1333 0.0667 0.2667 -0.0667 0.3333 0.2667
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

추가 답변 (1개)

Steven Lord
Steven Lord 2025년 2월 4일
편집: Steven Lord 2025년 2월 4일

0 개 추천

Make a copy of newca1, let's call it M. Multiply each column of M whose first element is negative by -1. This way if you think of your columns as vectors, they're all pointing "right" (towards +Inf along the x axis, if this were a 2-dimensional problem.) Call unique on M and ask not only for the unique rows but also the indices of the unique rows. Use the indices to extract the corresponding columns of newca1.

카테고리

도움말 센터File Exchange에서 Parallel Computing에 대해 자세히 알아보기

질문:

LC
2025년 2월 4일

댓글:

2025년 2월 4일

Community Treasure Hunt

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

Start Hunting!

Translated by