[英]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.