How to iteratively split a matrix into multiple matrices according to a condition?
조회 수: 3 (최근 30일)
이전 댓글 표시
I have a 2 column matrix with many many rows.
It's been sorted according to the values in the first column.
I now want to split the matrix into ten matrices.
Those values in the first column which are 0-10% of the highest value will go in one matrix, those that are 10-20% of the highest value will go in the next... you get the idea.
How would I go about doing this? I presume a for loop is involved, but am struggling to make it work. Any advice would be very much appreciated - thank you!
댓글 수: 0
채택된 답변
James Tursa
2018년 2월 20일
편집: James Tursa
2018년 2월 20일
Assuming values in 1st column are non-negative, you could put the results into a cell array:
M = your matrix
M1 = M(:,1); % 1st column
x = max(M1); % the max value
p = (0:10:100)/100 * x; % the comparison values
p(1) = -1; % Something less than 0 to catch any exact 0 values
result = cell(numel(p)-1,1);
for k=1:numel(p)-1
result{k} = M( M1>p(k) & M1<=p(k+1) , : );
end
Or if you want to "hide" the loop in the background via arrayfun:
result = arrayfun(@(x,y) M( M1>x & M1<=y , : ),p(1:end-1),p(2:end),'uni',false);
추가 답변 (1개)
Jan
2018년 2월 20일
M = rand(100, 3); % Your data
[~, ~, bin] = histcounts(M(:, 1), 10); % Split first column into 10 groups
C = splitapply(@(x) {x}, M, bin); % 10 cells
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!