大きいscipy.sparse.csc_matrix
ので正規化したいと思います。つまり、各要素から列の平均を減算し、列の標準偏差(std)iで除算します。
scipy.sparse.csc_matrix
があります.mean()
が、分散または標準を計算する効率的な方法はありますか?
次の式を使用して、平均を使用して分散を自分で計算できます。
E[X^2] - (E[X])^2
E[X]
平均を表します。したがって、計算E[X^2]
するには、を二乗してから関数csc_matrix
を使用する必要がありmean
ます。取得するには、通常の入力を使用して取得し(E[X])^2
た関数の結果を二乗するだけです。mean
Sicco の方が適切な答えを持っています。
ただし、別の方法は、疎行列を一度に 1 列ずつ密な numpy 配列に変換することです (行列全体を一度に変換する場合と比較してメモリ要件を低く抑えるため)。
# mat is the sparse matrix
# Get the number of columns
cols = mat.shape[1]
arr = np.empty(shape=cols)
for i in range(cols):
arr[i] = np.var(mat[:, i].toarray())
効率的な方法は、実際にはマトリックス全体を高密度化し、通常の方法で標準化することです
X = X.toarray()
X -= X.mean()
X /= X.std()
@Sebastian がコメントで指摘しているように、標準化は減算ステップでスパース構造を破壊する (多くのゼロ以外の要素を導入する) ため、行列をスパース形式に保つ必要はありません。