77388


numpyの処理について質問です。たとえば以下に示す A のような行列があるとき、  
最終行を全て `0` とした 行列 B を得るにはどうしたら良いでしょうか？  
ご教示よろしくお願いします。

[code]

    A=[
      [0,1,2],
      [3,4,5],
      [6,7,8]
    ]
    
[/code]

[code]

    B =[
      [0,1,2],
      [3,4,5],
      [0,0,0]
    ]
    
[/code]


CC BY-SA 4.0
2021-06-07T13:30:15.017
77387
2021-06-07T16:36:38.507
2021-06-07T16:36:38.507
3060
29699
question
numpy
numpyの行列で、ある特定の行を全て０にするにはどうしたらよいですか？

[code]

    import numpy as np
    
    A = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
    B = np.copy(A)
    B[-1] = 0
    
    # Python 3.8 以降であれば := (walrus operator)を使って以下の様にも書けます
    # (B := np.copy(A))[-1] = 0
    
    print(f'B:\n{B}')
    print(f'A:\n{A}')
    
    # 実行結果
    B:
    [[0 1 2]
     [3 4 5]
     [0 0 0]]
    A:
    [[0 1 2]
     [3 4 5]
     [6 7 8]]
    
[/code]

`B = np.copy(A)` としていますが、`B = A` としてしまうと shallow copy になってしまいます。

[code]

    A = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
    B = A
    B[-1] = 0
    
    print(f'B:\n{B}')
    print(f'A:\n{A}')
    
    # 実行結果
    B:
    [[0 1 2]
     [3 4 5]
     [0 0 0]]
    A:
    [[0 1 2]
     [3 4 5]
     [0 0 0]]
    
[/code]


CC BY-SA 4.0
2021-06-07T14:20:25.533
77388
2021-06-07T14:20:25.533
77387
answer