スパースDIA行列を作成してから、列を変更します

FooBar

私は2つのベクトルを持っていますt、そしてdelta-両方とも長さnです。そのベクトルを使用してスパースDIA行列を作成しA、列を調整します。すべてのi場合、ithエントリを列ごとに左に移動Adelta[i]ます。

列を制御する簡単な方法は、COOフォーマットです。これが私がうまくいくと思ったものです:

from scipy.sparse import diags
A = diags([t], offsets=[-1]).tocoo()
A.col = A.col - delta

ただし、私の例でA.nnz == len(A.col)216、との長さですtdelta239です。私はことを考えると、それが起こったのか理解していないnnz店舗が「明示的なゼロを含む保存されている値の数。」

どうすればこの問題に取り組むことができますか?これが私のサンプルデータです:

from numpy import np
t = np.array([ 2.655,  2.655,  2.655,  2.655,  2.655,  2.655,  2.655,  2.655,
        2.655,  2.655,  2.655,  2.655,  2.655,  2.655,  2.655,  2.655,
        2.655,  2.655,  2.655,  2.655,  2.655,  2.655,  2.655,  2.155,
        2.155,  2.155,  2.155,  2.155,  2.155,  2.155,  2.155,  2.155,
        2.155,  2.155,  2.155,  2.155,  2.155,  2.155,  2.155,  2.155,
        2.155,  2.155,  2.155,  2.155,  2.155,  2.155,  2.155,  1.655,
        1.655,  1.655,  1.655,  1.655,  1.655,  1.655,  1.655,  1.655,
        1.655,  1.655,  1.655,  1.655,  1.655,  1.655,  1.655,  1.655,
        1.655,  1.655,  1.655,  1.655,  1.655,  1.655,  1.655,  1.155,
        1.155,  1.155,  1.155,  1.155,  1.155,  1.155,  1.155,  1.155,
        1.155,  1.155,  1.155,  1.155,  1.155,  1.155,  1.155,  1.155,
        1.155,  1.155,  1.155,  1.155,  1.155,  1.155,  1.155,  0.655,
        0.655,  0.655,  0.655,  0.655,  0.655,  0.655,  0.655,  0.655,
        0.655,  0.655,  0.655,  0.655,  0.655,  0.655,  0.655,  0.655,
        0.655,  0.655,  0.655,  0.655,  0.655,  0.655,  0.655,  0.405,
        0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,
        0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,
        0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,
        0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,
        0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,
        0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,
        0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,
        0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,
        0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,
        0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,
        0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,
        0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.405,  0.   ,
        0.   ,  0.   ,  0.   ,  0.   ,  0.   ,  0.   ,  0.   ,  0.   ,
        0.   ,  0.   ,  0.   ,  0.   ,  0.   ,  0.   ,  0.   ,  0.   ,
        0.   ,  0.   ,  0.   ,  0.   ,  0.   ,  0.   ,  0.   ])
delta = np.array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5,
   5, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5,
   5, 5, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5,
   5, 5, 5, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4,
   5, 5, 5, 5, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4,
   4, 5, 5, 5, 5, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4,
   4, 4, 5, 5, 5, 5, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4,
   4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
   4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3,
   3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0, 1, 1, 1, 1, 2, 0, 2, 2, 3, 2,
   1, 3, 4, 3, 0, 3, 5, 4, 1, 0])
hpaulj
In [29]: t = np.array([1.2, 3.2, 4, 0, 0])
In [30]: A = sparse.diags([t], offsets=[-1])
In [31]: A
Out[31]: 
<6x6 sparse matrix of type '<class 'numpy.float64'>'
    with 5 stored elements (1 diagonals) in DIAgonal format>

への変換cooは0を取り除きます。

In [32]: Ac = A.tocoo()
In [33]: Ac
Out[33]: 
<6x6 sparse matrix of type '<class 'numpy.float64'>'
    with 3 stored elements in COOrdinate format>

A.tocoodiatocooバージョン)のコードを見てください(self.data != 0)マスクが付いています。


cooマトリックスを直接作成すると、少なくとも一時的にゼロが保持されます。

In [58]: A.A
Out[58]: 
array([[ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ],
       [ 1.2,  0. ,  0. ,  0. ,  0. ,  0. ],
       [ 0. ,  3.2,  0. ,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  4. ,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ]])
In [59]: M = sparse.coo_matrix((t, (np.arange(1,6),np.arange(5))),shape=(6,6))
In [60]: M
Out[60]: 
<6x6 sparse matrix of type '<class 'numpy.float64'>'
    with 5 stored elements in COOrdinate format>
In [61]: M.A
Out[61]: 
array([[ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ],
       [ 1.2,  0. ,  0. ,  0. ,  0. ,  0. ],
       [ 0. ,  3.2,  0. ,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  4. ,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ]])

インプレースゼロ除去:

In [64]: M.eliminate_zeros()
In [65]: M
Out[65]: 
<6x6 sparse matrix of type '<class 'numpy.float64'>'
    with 3 stored elements in COOrdinate format>

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

スパースDIA行列を作成してから、列を変更します

分類Dev

スパース行列を使用してカテゴリからバイナリ変数を作成します

分類Dev

観測値からスパース行列を作成します

分類Dev

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

分類Dev

pandas dfをlongからwideに変換してから、スパース行列に変換します

分類Dev

スパース行列を作成した後、スパースから密、さらにスパースに変換すると密度が低下します

分類Dev

タプルのリストからスパース行列を作成します

分類Dev

Rのエントリの行からスパース行列を作成します

分類Dev

スパース行列をEigen :: SparseMatrixからCusp :: hyb_matrixに変換します

分類Dev

スパース行列の作成、スパースは何をしますか?

分類Dev

シェイプレスを使用してケースクラスからデータを抽出し、変更して、ケースクラスを再作成します

分類Dev

スパース行列を完全行列に変換します-R

分類Dev

Rを使用してリストから行列を作成し、逆行列を作成します

分類Dev

配列リストjqueryを繰り返し処理してから、オブジェクトのプロパティにいくつかの変更を加えます。変更後に新しい配列リストを作成します。

分類Dev

Railsはパス変数を追加してループから新しいレコードを作成します

分類Dev

int8 scipyスパース行列作成エラーがint64構造を作成していますか?

分類Dev

INDEXを部分的に使用して、リストから行列を作成します

分類Dev

INDEXを部分的に使用して、リストから行列を作成します

分類Dev

Rを使用してスパース行列を作成する

分類Dev

バッチファイル-csvをループし、2つの列からパス変数を作成します

分類Dev

文字列として列名を持つデータフレームからPythonでスパース行列を作成する方法

分類Dev

Pythonを使用して指定された数値文字列から最大K桁を変更して最大のパリンドロームを作成しますか?

分類Dev

ボタンを押して、D3スケールを線形からパウに変更します

分類Dev

列の値が変更されたときに1から始まるシーケンスを作成します

分類Dev

rの計算を使用して、データベースから行列を作成します

分類Dev

forループを回避して、ノードのリストから隣接行列を作成します

分類Dev

applyを使用して、Rのデータフレームから隣接行列のリストを作成します

分類Dev

Pythonリストのすべての要素を変更し、型を文字列から整数に変更します

分類Dev

sql group byをスパークし、列名を変更しますか?

Related 関連記事

  1. 1

    スパースDIA行列を作成してから、列を変更します

  2. 2

    スパース行列を使用してカテゴリからバイナリ変数を作成します

  3. 3

    観測値からスパース行列を作成します

  4. 4

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

  5. 5

    pandas dfをlongからwideに変換してから、スパース行列に変換します

  6. 6

    スパース行列を作成した後、スパースから密、さらにスパースに変換すると密度が低下します

  7. 7

    タプルのリストからスパース行列を作成します

  8. 8

    Rのエントリの行からスパース行列を作成します

  9. 9

    スパース行列をEigen :: SparseMatrixからCusp :: hyb_matrixに変換します

  10. 10

    スパース行列の作成、スパースは何をしますか?

  11. 11

    シェイプレスを使用してケースクラスからデータを抽出し、変更して、ケースクラスを再作成します

  12. 12

    スパース行列を完全行列に変換します-R

  13. 13

    Rを使用してリストから行列を作成し、逆行列を作成します

  14. 14

    配列リストjqueryを繰り返し処理してから、オブジェクトのプロパティにいくつかの変更を加えます。変更後に新しい配列リストを作成します。

  15. 15

    Railsはパス変数を追加してループから新しいレコードを作成します

  16. 16

    int8 scipyスパース行列作成エラーがint64構造を作成していますか?

  17. 17

    INDEXを部分的に使用して、リストから行列を作成します

  18. 18

    INDEXを部分的に使用して、リストから行列を作成します

  19. 19

    Rを使用してスパース行列を作成する

  20. 20

    バッチファイル-csvをループし、2つの列からパス変数を作成します

  21. 21

    文字列として列名を持つデータフレームからPythonでスパース行列を作成する方法

  22. 22

    Pythonを使用して指定された数値文字列から最大K桁を変更して最大のパリンドロームを作成しますか?

  23. 23

    ボタンを押して、D3スケールを線形からパウに変更します

  24. 24

    列の値が変更されたときに1から始まるシーケンスを作成します

  25. 25

    rの計算を使用して、データベースから行列を作成します

  26. 26

    forループを回避して、ノードのリストから隣接行列を作成します

  27. 27

    applyを使用して、Rのデータフレームから隣接行列のリストを作成します

  28. 28

    Pythonリストのすべての要素を変更し、型を文字列から整数に変更します

  29. 29

    sql group byをスパークし、列名を変更しますか?

ホットタグ

アーカイブ