2

私は次のようなものが欲しい:

Mu = mean(X);  % column-wise means
X(X == 0) = Mu(current_column);  % assign the mean value of the current column
                                 %   to the zero-element

しかし、現在の列 (つまり、現在のゼロ値がある列) の平均を現在のゼロ値の行列エントリに割り当てたいことを MATLAB に伝えるにはどうすればよいでしょうか?

4

2 に答える 2

2

列単位の平均を含む X と同じ形状の配列を作成できます。

means = repmat(mean(X), [size(X,1) 1]);
X(X==0) = means(X==0);

[追加するために編集...]

または、配列の明示的な展開が気分を害する場合は、次のようにすることができます。

X = bsxfun(@(x,y)(x+(x==0)*y), X, mean(X));

これは私の好みには少し「賢い」ですが、私がテストした単一のケース (1000x1000 配列、その約 10% がゼロ) では約 25% 高速であるようです。

于 2011-03-10T11:02:47.873 に答える