

[マニュアル](https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.dia_matrix.html)
等で `scipy.sparse.dia_matrix` の使い方を調べると、

[code]

    dia_matrix((data, offsets), shape=(M, N))
    where the data[k,:] stores the diagonal entries for diagonal offsets[k]
    
[/code]

との説明とともに下記のような例が示されています。３行4列のdata配列にoffsetsをどのように作用させると４行4列になるのかよくわかりません。ご教示いただければ幸いです。

[code]

    data = np.array([[1, 2, 3, 4]]).repeat(3, axis=0)
    offsets = np.array([0, -1, 2])
    dia_matrix((data, offsets), shape=(4, 4)).toarray()
    array([[1, 0, 3, 0],
           [1, 2, 0, 4],
           [0, 2, 3, 0],
           [0, 0, 3, 4]])
    
[/code]


CC BY-SA 4.0
2022-06-17T23:03:42.867
89454
2022-06-26T04:59:58.463
2022-06-18T08:22:56.293
3060
53122
question
python scipy
scipy.sparse.dia_matrixの使い方


「4行4列になる」のは`shape=(4, 4)`としているためです。  
※「m行n列にする」には`shape=(m, n)`とします。

[code]

    import numpy as np
    from scipy.sparse import dia_matrix
    data = np.array([[1, 2, 3, 4], [10, 20, 30, 40], [100, 200, 300, 400]])
    print("data=")
    print(data)
    offsets = np.array([0, -1, 2])
    dm = dia_matrix((data, offsets), shape=(4, 4)).toarray()
    print("dm=")
    print(dm)
    
[/code]

結果

[code]

    data=
    [[  1   2   3   4]
     [ 10  20  30  40]
     [100 200 300 400]]
    dm=
    [[  1   0 300   0]
     [ 10   2   0 400]
     [  0  20   3   0]
     [  0   0  30   4]]
    
[/code]

試しに`shape=(3, 5)`としたときの結果は次のようになります。

[code]

    dm=
    [[  1   0 300   0   0]
     [ 10   2   0 400   0]
     [  0  20   3   0   0]]
    
[/code]


CC BY-SA 4.0
2022-06-26T04:59:58.463
89598
2022-06-26T04:59:58.463
35558
89454
answer