Find matrix rows that have 3 common values, store the rows and the values
2 次查看(过去 30 天)
显示 更早的评论
Suppose I have a 500000x5 matrix and for each row I need to find rows that have 3 common elements within the first 4 elements of the row but different 5th element and store the common values and the sum of the 5th elements to a new matrix.
For example:
1 2 3 4 1
1 2 3 5 2
Would yield a row like this in a new matrix
1 2 3 3
Of course this could be done with 2 nested for loops and if statements but the calculation takes like 10 hours. I need something that takes a few minutes even with 500k rows.. Is this possible with Matlab?
5 个评论
采纳的回答
Matt J
2019-4-16
编辑:Matt J
2019-4-17
I'll call your original 5 column matrix A.
D=cell(4,1);
a5=A(:,5);
As=sort(A(:,1:4),2);
for i=1:4 %small loop
Triangles{i}= [As(:, setdiff(1:4,i)),a5];
end
Q=cell2mat(Triangles);
result=consol(Q(:,1:3),Q(:,4));
function out=consol(B,b)
[C,~,j]=unique(B,'rows');
nc=size(C,1);
c=accumarray(j,b,[nc,1]);
out=[C,c];
keep=histcounts(j,1:nc+1)>1;
out=out(keep,:);
end
9 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!