簡體   English   中英

如何計算 Scipy 中稀疏矩陣列的方差?

[英]How do I compute the variance of a column of a sparse matrix in Scipy?

我有一個很大的scipy.sparse.csc_matrix並且想對其進行規范化。 即從每個元素中減去列平均值並除以列標准偏差 (std)i。

scipy.sparse.csc_matrix有一個scipy.sparse.csc_matrix .mean()但是有沒有一種有效的方法來計算方差或標准差?

您可以使用均值自行計算方差,公式如下:

E[X^2] - (E[X])^2

E[X]代表平均值。 因此,要計算E[X^2]您必須對csc_matrix求平方,然后使用mean函數。 要獲得(E[X])^2您只需對使用正常輸入獲得的mean函數的結果求平方即可。

Sicco 有更好的答案。

但是,另一種方法是將稀疏矩陣一次一列轉換為密集的 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())

我所知道的最有效的方法是使用scikit StandardScalar

from sklearn.preprocessing import StandardScaler


scalar = StandardScaler(with_mean=False)
scalar.fit(X)

然后方差在屬性var_

X_var = scalar.var_

不過,奇怪的是,當我第一次使用pandas加密時(非常慢),我的回答相差了幾個百分點。 不知道哪個更准確。

有效的方法實際上是對整個矩陣進行致密化,然后以通常的方式對其進行標准化

X = X.toarray()
X -= X.mean()
X /= X.std()

正如@Sebastian 在他的評論中指出的那樣,標准化會在減法步驟中破壞稀疏結構(引入大量非零元素),因此將矩陣保持為稀疏格式是沒有用的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM