私はもともと関連する質問hereを尋ねましたが、実際にはどこにも出てこないようです。私はそれが....Python Pytablesを使ってMatlabの疎行列をロードする
を助けるかもしれない、より具体的にその一部を修正してください場合はおそらく、私は、格納されたファイルは、MATLABのスパース形式(HDF5、私は信じて CSC)を使用して、と私は直接に動作するようPytablesを使用しようとしている必要があり、 ですが、まだ成功していません。私は次の操作を行うことができますh5py使用:
# Method 1: uses h5py (WORKS)
f1 = h5py.File(fname)
data = f1['M']['data']
ir = f1['M']['ir']
jc = f1['M']['jc']
M = scipy.sparse.csc_matrix((data, ir, jc))
が、私はPytablesに相当するものをやろうとします
# Method 2: uses pyTables (DOESN'T WORK)
f2 = tables.openFile(fname)
data = f2.root.M.data
ir = f2.root.M.ir
jc = f2.root.M.jc
M = scipy.sparse.csc_matrix((data,ir,jc))
これはエラーで(長い待ち時間の後に)失敗:
TypeError Traceback (most recent call last)
/home/tdiethe/BMJ/<ipython console> in <module>()
/usr/lib/python2.6/dist-packages/scipy/sparse/compressed.pyc in __init__(self, arg1, shape, dtype, copy, dims, nzmax)
56 self.indices = np.array(indices, copy=copy)
57 self.indptr = np.array(indptr, copy=copy)
---> 58 self.data = np.array(data, copy=copy, dtype=getdtype(dtype, data))
59 else:
60 raise ValueError, "unrecognized %s_matrix constructor usage" %\
/usr/lib/python2.6/dist-packages/scipy/sparse/sputils.pyc in getdtype(dtype, a, default)
69 canCast = False
70 else:
---> 71 raise TypeError, "could not interpret data type"
72 else:
73 newdtype = np.dtype(dtype)
TypeError: could not interpret data type
f2
を見て
:
In [63]: f2.root.M.data
Out[63]:
/M/data (CArray(4753606,), zlib(3)) ''
atom := Float64Atom(shape=(), dflt=0.0)
maindim := 0
flavor := 'numpy'
byteorder := 'little'
chunkshape := (8181,)
In [64]: f2.root.M.ir
Out[64]:
/M/ir (CArray(4753606,), zlib(3)) ''
atom := UInt64Atom(shape=(), dflt=0)
maindim := 0
flavor := 'numpy'
byteorder := 'little'
chunkshape := (8181,)
In [65]: f2.root.M.jc
Out[65]:
/M/jc (CArray(133339,), zlib(3)) ''
atom := UInt64Atom(shape=(), dflt=0)
maindim := 0
flavor := 'numpy'
byteorder := 'little'
chunkshape := (7843,)
私は2つの質問があります:私はそれに対して操作を実行できるようにするためにscipyのダウンロードスパース行列への変換を実行する必要がある、または私ができるかどのように私はpytables
- をディスクファイル(行列の乗算など)で直接操作を実行します。つまり、ファイルをメモリにロードせずに(pytablesを使用する点は何ですか?)
これらのエラーは、scipyのダウンロードから出てきています。 'data'、' ir'、 'jc'で動作するnumpyだけの能力を調べることができますか?データ(つまり、dtype、形状など)についてnumpyは何を言いますか?結果は期待通りですか? '' scipy.sparse.csc_matrix''の呼び出しシグネチャに期待されるものに対応していますか? – dtlussier
ああ、私がやらなければならなかったのは次のようなものでした: 'M = sparse.csc_matrix((f2.root.M.data [...]、f2.root.M.ir [...]、f2) root.M.jc [...])) ' まだ2番目の質問は不明ですか? PyTablesでは、要素単位の操作しか利用できないようですね。 – tdc