scipyのスパース行列から対角要素を削除する

スパース行列から対角要素を削除したい。行列はスパースであるため、これらの要素は一度削除すると保存しないでください。

Scipyは、対角要素の値を設定する方法を提供します:setdiag

lil_matrixを使用して試してみると、次のように機能します。

>>> a = np.ones((2,2))
>>> c = lil_matrix(a)
>>> c.setdiag(0)
>>> c
<2x2 sparse matrix of type '<type 'numpy.float64'>'
    with 2 stored elements in LInked List format>

ただし、csr_matrixでは、対角要素がストレージから削除されていないようです。

>>> b = csr_matrix(a)
>>> b
<2x2 sparse matrix of type '<type 'numpy.float64'>'
    with 4 stored elements in Compressed Sparse Row format>

>>> b.setdiag(0)
>>> b
<2x2 sparse matrix of type '<type 'numpy.float64'>'
    with 4 stored elements in Compressed Sparse Row format>

>>> b.toarray()
array([[ 0.,  1.],
       [ 1.,  0.]])

もちろん、密集したアレイを通じて、次のことが可能になります。

>>> csr_matrix(b.toarray())
<2x2 sparse matrix of type '<type 'numpy.float64'>'
    with 2 stored elements in Compressed Sparse Row format>

それは意図されていますか?もしそうなら、それはcsr行列の圧縮形式によるものですか?スパースからデンス、そして再びスパースに移行する以外に回避策はありますか?

hpaulj

要素を0に設定するだけでは、csr行列のスパース性は変わりません申請する必要がありますeliminate_zeros

In [807]: a=sparse.csr_matrix(np.ones((2,2)))
In [808]: a
Out[808]: 
<2x2 sparse matrix of type '<class 'numpy.float64'>'
    with 4 stored elements in Compressed Sparse Row format>
In [809]: a.setdiag(0)
In [810]: a
Out[810]: 
<2x2 sparse matrix of type '<class 'numpy.float64'>'
    with 4 stored elements in Compressed Sparse Row format>
In [811]: a.eliminate_zeros()
In [812]: a
Out[812]: 
<2x2 sparse matrix of type '<class 'numpy.float64'>'
    with 2 stored elements in Compressed Sparse Row format>

csr行列のスパース性を変更すると比較的コストがかかるため、スパース性を変更せずに値を0に変更できます。

In [829]: %%timeit a=sparse.csr_matrix(np.ones((1000,1000)))
     ...: a.setdiag(0)
100 loops, best of 3: 3.86 ms per loop

In [830]: %%timeit a=sparse.csr_matrix(np.ones((1000,1000)))
     ...: a.setdiag(0)
     ...: a.eliminate_zeros()
SparseEfficiencyWarning: Changing the sparsity structure of a csr_matrix is expensive. lil_matrix is more efficient.
10 loops, best of 3: 133 ms per loop

In [831]: %%timeit a=sparse.lil_matrix(np.ones((1000,1000)))
     ...: a.setdiag(0)
100 loops, best of 3: 14.1 ms per loop

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

scipyのスパース行列のゼロ以外の対角要素を削除/設定します

分類Dev

scipyスパース行列からNaNを削除する

分類Dev

行列の対角線から要素を削除する

分類Dev

スパース行列データ配列の対角要素のインデックスを取得する方法

分類Dev

行列の3Dスタックからnumpy / scipyでブロック対角行列の3Dスタックを構築する効率的な方法

分類Dev

Eigen-各(スパース)行列行を対応する対角要素で除算します

分類Dev

Scipyスパース行列の数とは異なる要素を削除するにはどうすればよいですか?

分類Dev

スパース行列の主対角線を抽出するにはどうすればよいですか?

分類Dev

PythonのSciPyでスパース行列の小さな要素を削除するにはどうすればよいですか?

分類Dev

ゼロ以外の要素の数でscipyスパース行列を正規化する

分類Dev

scipyスパース行列のnan行を削除します

分類Dev

scipyスパース行列の対称化

分類Dev

R /下三角要素のベクトルから対称行列を作成する

分類Dev

Rのスパース行列の対角線をゼロにするメモリ効率の良い方法

分類Dev

scipyのスパース行列に対するLog-sum-expトリック

分類Dev

juliaのスパース行列に対角線を効率的に挿入します

分類Dev

Pythonでスパース行列の対角線全体に1つのエントリを配置する方法

分類Dev

tensorflowを使用したスパース行列の対角乗算

分類Dev

非スパース行列にscipyスパースデータ構造を使用するのは良いですか?

分類Dev

Scipyスパース行列の密度を確認する

分類Dev

Pythonによる三重対角対称スパース行列の対角化

分類Dev

行列の対角線より下の要素を含むリストを完全な行列に変換する

分類Dev

Scipy:スパース行列からndarrayへ

分類Dev

Tensorflow:サブ/スーパーダイアゴナルへの入力を使用して対角行列を作成する

分類Dev

Rのスパース行列の対角線に「スパース」値を割り当てます

分類Dev

データフレームから特定の対角行列を抽出する

分類Dev

このブロック三重対角(スパース)行列を作成するにはどうすればよいですか?

分類Dev

Juliaのスパース行列から明示的なゼロ値を削除します

分類Dev

スパース行列から条件付き列を削除します

Related 関連記事

  1. 1

    scipyのスパース行列のゼロ以外の対角要素を削除/設定します

  2. 2

    scipyスパース行列からNaNを削除する

  3. 3

    行列の対角線から要素を削除する

  4. 4

    スパース行列データ配列の対角要素のインデックスを取得する方法

  5. 5

    行列の3Dスタックからnumpy / scipyでブロック対角行列の3Dスタックを構築する効率的な方法

  6. 6

    Eigen-各(スパース)行列行を対応する対角要素で除算します

  7. 7

    Scipyスパース行列の数とは異なる要素を削除するにはどうすればよいですか?

  8. 8

    スパース行列の主対角線を抽出するにはどうすればよいですか?

  9. 9

    PythonのSciPyでスパース行列の小さな要素を削除するにはどうすればよいですか?

  10. 10

    ゼロ以外の要素の数でscipyスパース行列を正規化する

  11. 11

    scipyスパース行列のnan行を削除します

  12. 12

    scipyスパース行列の対称化

  13. 13

    R /下三角要素のベクトルから対称行列を作成する

  14. 14

    Rのスパース行列の対角線をゼロにするメモリ効率の良い方法

  15. 15

    scipyのスパース行列に対するLog-sum-expトリック

  16. 16

    juliaのスパース行列に対角線を効率的に挿入します

  17. 17

    Pythonでスパース行列の対角線全体に1つのエントリを配置する方法

  18. 18

    tensorflowを使用したスパース行列の対角乗算

  19. 19

    非スパース行列にscipyスパースデータ構造を使用するのは良いですか?

  20. 20

    Scipyスパース行列の密度を確認する

  21. 21

    Pythonによる三重対角対称スパース行列の対角化

  22. 22

    行列の対角線より下の要素を含むリストを完全な行列に変換する

  23. 23

    Scipy:スパース行列からndarrayへ

  24. 24

    Tensorflow:サブ/スーパーダイアゴナルへの入力を使用して対角行列を作成する

  25. 25

    Rのスパース行列の対角線に「スパース」値を割り当てます

  26. 26

    データフレームから特定の対角行列を抽出する

  27. 27

    このブロック三重対角(スパース)行列を作成するにはどうすればよいですか?

  28. 28

    Juliaのスパース行列から明示的なゼロ値を削除します

  29. 29

    スパース行列から条件付き列を削除します

ホットタグ

アーカイブ