1

私は高次元の配列を持っていますが、非常にまばらな行列です。すべての行列の列の合計が 1 になるように正規化したいと考えています。

私が使用するサンプルコードは次のとおりです。

bg = matrices{1};
for i = 2:length(matrices) , bg = bg + matrices{i}; end
normalizer = sum(bg);
for i = 1:length(matrices) 
    for j = 1:size(matrices{i},1)
        matrices{i}(j,:) = matrices{i}(j,:) ./ normalizer;
    end
end

ただし、ご想像のとおり、これは非常に遅いです。1 つの選択肢は次のとおりです。

for i = 1:length(matrices) 
    matrices{i} = matrices{i} ./ repmat(normalizer,size(matrices{i},1),1);
end

しかし、巨大でほぼ完全な行列を作成するのに十分なメモリがないため、これは停止します (ノーマライザーで繰り返されます)。

より良い代替案を提案できますか?

4

2 に答える 2

1

問題を単一の疎行列に変換した場合、次を使用できます

bsxfun(@rdivide,A,normalizer);
于 2012-08-30T22:10:43.223 に答える