2016-09-12 21 views
2

私はpandas DataFrameオブジェクトに基づいてツーリングを開発しています。私は、それを行ごとにdtype( 'O')のリスト/ numpy配列に変換することなく、Scipyの疎な行列をDataFrameの列として保持したいと考えています。DataFrameカラムとしてScipyの疎な行列

パンダは、行列をスカラーとして扱い、インデックスを追加することを提案しているため、以下のスニペットは機能しません。行列の行インデックスにpd.RangeIndexを渡すと、行列はデータフレームのすべての行について繰り返されます(pandasはスカラーであるとみなします)。

df = pd.DataFrame(dict(X=list(ma))) 

しかし、これは行方向CSRにマトリックスを切断する1行の各行列:

ma = scipy.sparse.rand(10, 100, 0.1, 'csr', dtype=np.float64) 
df = pd.DataFrame(dict(X=ma)) 

これは、作業が行います。それで、元のマトリックスで作業したいと思うたびにvstackする必要があります。

任意のポインタ?私はdtype( 'O')を持っていると思われるpd.SeriesオブジェクトにCSRマトリックスをラップしようとしましたが、私は基底のデータがたくさんの配列などであると仮定しています。

答えて

1

疎のデータフレームまたはデータ機能があります。それはまだ実験的です。私は、それとscipyの疎な行列の間で前後に変換することに関するいくつかの質問に答えました。サイドバーから

Populate a Pandas SparseDataFrame from a SciPy Sparse Coo Matrix

私は疎行列はパンダフレームに追加することができる方法が表示されないように、特殊なパンダの構造を持ちません。スパース行列の内部構造はあまりにも異なっています。最初は、numpy配列のサブクラスではありません。

csrマトリックスは、データが3つのアレイに含まれるオブジェクトです。ma.dataおよびma.indicesは、配列の非ゼロ要素ごとに1つの値を持つ1d配列です。 ma.indptrには、行列の各行の値があります。

list(ma)は無意味です。 ma.toarray()は、同じデータを持つ2次元配列を生成し、それらのゼロもすべて埋められます。

その他の疎行列のフォーマットは、他の構造において、データを格納する - coo 3つの等しい長配列、lilためのリストの二つのリスト、及びdokの辞書。

+0

返信いただきありがとう@hpaulj。私は実際にPandasを介してSciPy行列の列にアクセスすることに興味はなく、行全体または行列全体にアクセスすることには興味がありません。メモリレイアウトレベルでのndarrayと疎な行列型の不一致を理解しています。両方とも適合できる抽象概念があることを期待していました... 'list(ma)'は、少なくともCSRマトリクスの場合、元のCSRマトリックスの各行に対して1行のCSR行列を作成します。 –

+0

データフレームの列として、密度の高いまたは疎な行列(2d)をどのように使用できるかはわかりません。私は 'pandas'が2次元配列の列を等しい数の列にマップしようとしますと信じています。セルはオブジェクトポインタでもよいが、列全体ではありません。しかし、私はパンダを知っているよりもずっと気分が悪くて、サイフィを知っています。 – hpaulj

+0

もう一度ありがとうございます。わかりました。非常に行が、例えば、に対応する特徴ベクトルのCSR行列を格納するための便利な場所であろうか。 DataFrameの別の列にあるラベルで、基になるCSRマトリックスにアクセスすることはできません。私が推測することはできません:) –

関連する問題