grouping array based on similar row element

2 次查看(过去 30 天)
Hello,
I have a matrix A:
123 1970 1 1 12
123 1971 1 1 120
123 1972 1 12 300
240 1970 1 10 40
240 1971 2 1 45
240 1972 3 34 56
230 1970 1 2 120
230 1971 2 3 320
230 1972 1 14 360
I wish to export 3 different matrices in a folder based on the common column element. This might be easy without a loop using an index operation. The resulting matrices
A =
123 1970 1 1 12
123 1971 1 1 120
123 1972 1 12 300
B =
240 1970 1 10 40
240 1971 2 1 45
240 1972 3 34 56
C =
230 1970 1 2 120
230 1971 2 3 320
230 1972 1 14 360
  3 个评论
Poulomi Ganguli
Poulomi Ganguli 2020-1-8
编辑:Poulomi Ganguli 2020-1-8
yes, the last row of C should be in B. sorry. Corrected now.
Image Analyst
Image Analyst 2020-1-8
It's pretty universal among experienced MATLAB users that that would be a bad idea.
Now, if you want ot do it in a loop
uniqueValues = unique(A(:, 1));
for k = 1 : length(uniqueValues)
thisValue = uniqueValues(k);
rowsWithThisValue = A(:, 1) == thisValue;
subArray = A(rowsWithThisValue, :)
% Now do something with the subArray
end
then that would be okay.

请先登录,再进行评论。

采纳的回答

Guillaume
Guillaume 2020-1-8
The easiest:
savelocation = 'C:\somewhere\somefolder';
fileformat = 'submatrices_%02d.txt';
group = findgroups(A(:, 1));
splitapply(@(subA, index) writematrix(subA, fullfile(savelocation, sprintf(fileformat, index(1)))), A, group, group); %passing group twice so we get it in the anonymous function to use as file number
  3 个评论
Guillaume
Guillaume 2020-1-9
Or simpler:
splitapply(@(subA) writematrix(subA, fullfile(Save_Location, sprintf('%d.txt', subA(1))), 'Delimiter', ' '), A, group);
lim xiang
lim xiang 2020-7-16
Hi, I am new to Matlab. May you help to explain the code ? Thank you

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrices and Arrays 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by