3

私は非常に大きな疎行列を持っています (各行は数千の要素で、ほとんどの要素は 0 です)。さらに、行インデックスのベクトルがあり、各行に対して次の操作を実行する必要があります。

非ゼロ要素 (行内のすべての非ゼロ要素からランダムに選択) の半分をゼロに反転し、反転した要素の列インデックスを保存します。

ご指摘ありがとうございます。

4

1 に答える 1

2

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);
于 2012-12-06T04:04:50.163 に答える