私はPandasに スパース行列と配列のサポート が含まれるようになりました)==に気付きました。現在、私はDataFrame()
sを次のように作成します:
_return DataFrame(matrix.toarray(), columns=features, index=observations)
_
SparseDataFrame()
またはscipy.sparse.csc_matrix()
を使用してcsr_matrix()
を作成する方法はありますか?密集した形式に変換すると、RAM=うまくいきません。ありがとうございます。
直接変換はサポートされていないATMです。寄付は大歓迎です!
これを試してください。SpareSeriesはcsc_matrix(1カラム用)によく似ており、かなりスペース効率が良いので、メモリ上は問題ありません。
In [37]: col = np.array([0,0,1,2,2,2])
In [38]: data = np.array([1,2,3,4,5,6],dtype='float64')
In [39]: m = csc_matrix( (data,(row,col)), shape=(3,3) )
In [40]: m
Out[40]:
<3x3 sparse matrix of type '<type 'numpy.float64'>'
with 6 stored elements in Compressed Sparse Column format>
In [46]: pd.SparseDataFrame([ pd.SparseSeries(m[i].toarray().ravel())
for i in np.arange(m.shape[0]) ])
Out[46]:
0 1 2
0 1 0 4
1 0 0 5
2 2 3 6
In [47]: df = pd.SparseDataFrame([ pd.SparseSeries(m[i].toarray().ravel())
for i in np.arange(m.shape[0]) ])
In [48]: type(df)
Out[48]: pandas.sparse.frame.SparseDataFrame
pandas v 0.20.0以降では、SparseDataFrame
コンストラクターを使用できます。
the pandas docs の例:
import numpy as np
import pandas as pd
from scipy.sparse import csr_matrix
arr = np.random.random(size=(1000, 5))
arr[arr < .9] = 0
sp_arr = csr_matrix(arr)
sdf = pd.SparseDataFrame(sp_arr)