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 件のコメント
Image Analyst
2020 年 1 月 8 日
It's pretty universal among experienced MATLAB users that that would be a bad idea.
See the FAQ.
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
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
2020 年 1 月 9 日
Or simpler:
splitapply(@(subA) writematrix(subA, fullfile(Save_Location, sprintf('%d.txt', subA(1))), 'Delimiter', ' '), A, group);
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!