【问题标题】:Matlab - Flip 1's to 0's in a matrixMatlab - 将矩阵中的 1 翻转为 0
【发布时间】:2012-12-06 12:11:16
【问题描述】:

我有一个非常大的稀疏矩阵(每行有几千个元素——大多数元素都是 0)。另外,我有一个行索引向量,需要对每一行进行如下操作:

将一半非零元素(从行中所有非零元素中随机选择)翻转为零,并保存翻转后元素的列索引。

感谢您的任何指点。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您可以使用randperm() 生成要在一行中归零的列的随机顺序。

    % A: sparse matrix (assume 2d)
    % ri = vector or row indices
    
    for i = 1:numel(ri)               % Edit one row of A at a time
        row = A( ri(i), : );
        c = find( row );              % Find column index of all non-zero elements a row
        cdel = randperm(length(c));   % Random rearrangement of column index
        cdel(1:end/2) = [];           % Only want to zero out half the columns, so ignore the other half
        % c(cdel) will give the column index of elements to be zeroed.
        row( 1, c(cdel) ) = 0;        % Zero out selected columns
        A( ri(i), : ) = row;          % Update A
    end
    

    代码中可能存在一些错误,因为我尚未对其进行测试。 还有一些步骤是多余的,可以合并。

    c(cdel) 将为您提供已翻转列的所需索引。您可以将其保存在单元格向量中,因为每行的大小可能会发生变化。你可以这样做,

    fcol{i} = c(cdel);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2019-02-06
      • 1970-01-01
      相关资源
      最近更新 更多