从二进制矩阵中逐列删除第一个。 MATLAB

时间:2018-02-06 22:08:14

标签: matlab unique binary-matrix

我有一些二进制矩阵。我想从每列中删除所有第一个,但如果此值在列中单独,请保留one。我有一些代码,它产生正确的结果,但它看起来很丑 - 我应该遍历所有列。

你能否就如何改进我的代码给我一些建议?

非矢量化代码:

% Dummy matrix for SE
M = 10^3;
N = 10^2;
ExampleMatrix = (rand(M,N)>0.9);
ExampleMatrix1=ExampleMatrix;
% Iterate columns
for iColumn = 1:size(ExampleMatrix,2)
    idx = find(ExampleMatrix(:,iColumn)); % all nonzeroes elements
    if numel(idx) > 1
        % remove all ones except first
        ExampleMatrix(idx(1),iColumn) = 0;
    end
end

1 个答案:

答案 0 :(得分:1)

我认为这可以满足您的需求:

ind_col = find(sum(ExampleMatrix, 1)>1); % index of relevant columns
[~, ind_row] = max(ExampleMatrix(:,ind_col), [], 1); % index of first max of each column
ExampleMatrix(ind_row + (ind_col-1)*size(ExampleMatrix,1)) = 0; % linear indexing

代码使用:

  • max的第二个输出给出了第一个最大值的索引。在这种情况下,max沿第一维应用,以查找每列的第一个最大值;
  • linear indexing