私は他に何を使用できるようにscipyのダウンロードでは、スパース行列でix_()を使用して動作するようには思えないのですか?

StackOverflow https://stackoverflow.com/questions/2338260

質問

でnumpyの、ix_()はグラブ行およびマトリックスの列に使用されるが、それは、スパース行列で動作するようには思えません。例えば、それは密行列を使用しているため、このコードは動作します:

>>> import numpy as np
>>> x = np.mat([[1,0,3],[0,4,5],[7,8,0]])
>>> print x
[[1 0 3]
 [0 4 5]
 [7 8 0]]
>>> print x[np.ix_([0,2],[0,2])]
[[1 3]
 [7 0]]

は、私はインデックスにマトリックスの4つの隅を与え0番目と2番目の行と列に対応する要素をix_()を使用する。

問題はix_は、スパース行列で動作するようには思えないということです。前のコードに引き続き、私は次のことを試してください:

>>> import scipy.sparse as sparse
>>> xspar = sparse.csr_matrix(x)
>>> print xspar
  (0, 0) 1
  (0, 2) 3
  (1, 1) 4
  (1, 2) 5
  (2, 0) 7
  (2, 1) 8
>>> print xspar[np.ix_([0,2],[0,2])]

と、この例外があると言って巨大なエラーメッセージが出ます:

  File "C:\Python26\lib\site-packages\scipy\sparse\compressed.py", line 138, in check_format
    raise ValueError('data, indices, and indptr should be rank 1')
ValueError: data, indices, and indptr should be rank 1

それらはすべて同じ例外を発生させていないが)、私はscipyのダウンロードにより提供される他の疎行列形式でこれを試してみましたが、それらのどれもがix_(で動作するようには思えません。

それは一つ一つの要素からわずかリストに慎重なようではありませんので、

私が与えた例は非常に大きなまたは非常に疎ではなかったマトリックスを使用しますが、私が扱っていたものは非常にまばらな、潜在的に非常に大きいですます。

ん誰か知っている(うまくいけば簡単)scipyのダウンロードには、スパース行列とインデックスのこの種を行う方法や、この機能は、単にこれらのスパース行列?

には組み込まれていません
役に立ちましたか?

解決

の代わりにこれを試してください:

>>> print xspar
  (0, 0) 1
  (0, 2) 3
  (1, 1) 4
  (1, 2) 5
  (2, 0) 7
  (2, 1) 8
>>> print xspar[[[0],[2]],[0,2]]
  (0, 0) 1
  (0, 2) 3
  (2, 0) 7

これとの違いに注意してください。

>>> print xspar[[0,2],[0,2]]
  [[1 0]]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top