A = [
63 55 85 21 71
80 65 85 48 53
55 60 93 71 66
21 65 40 33 21
61 90 80 48 50
];
B = zeros( size(A,1)-1, size(A,2));
for i=1:size(A,2)
x = A(:,i);
maxIndex = find(x==min(x(:)),1,'first');
x(maxIndex) = [];
B(:,i) = x;
end
disp(B);
Еще одно векторизованное решение:
M = mat2cell(A,5,ones(1,size(A,2)));
z = cellfun(@RemoveMin,M);
B = cell2mat(z);
disp(B);
function x = RemoveMin(x)
minIndex = find(x==min(x(:)),1,'first');
x(minIndex) = [];
x = {x};
end
Другое решение:
[~,I] = min(A);
indexes = sub2ind(size(A),I,1:size(A,2));
B = A;
B(indexes) = [];
out = reshape(B,size(A)-[1 0]);
disp(out);
Лично я предпочитаю первое, потому что:
- Ибо петли не являются злом - во многих случаях они на самом деле быстрее (с помощью JIT-оптимизатора)
- Алгоритм более понятен разработчику, который читает ваш код.
Но, конечно, решать вам.