77906


値が昇順にソートされたリスト`A`とMかけるN行の`numpy.ndarray`型の行列`M`があります。  
この`M`から`A`にある数字に対応する行を削除したいです。  
例として、5かける3の行列から2行目と4行目を削除する場合を考えます。

[code]

    import numpy as np
    A = [2, 4]
    B = np.array(
    [[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
    [10, 11, 12],
    [13, 14, 15]]
    )
    
    # new_array  = 
    
[/code]

`new_arrray`をこの例の期待する出力とした時、中身は

[code]

    [[1, 2, 3],
    [7, 8, 9],
    [13, 14, 15]]
    
[/code]

となるような方法を教えてください。


CC BY-SA 4.0
2021-07-01T08:02:07.440
77905
2021-07-02T01:17:29.173
2021-07-01T08:32:23.793
36832
question
python python3 numpy
numpyのndarrayの指定した複数の行を取り除く方法


[numpy.delete](https://numpy.org/doc/stable/reference/generated/numpy.delete.html)で特定の行を削除できます。

[NumPyで任意の行・列を削除するnp.deleteの使い方](https://note.nkmk.me/python-numpy-delete/)  
[SO本家の類似回答](https://stackoverflow.com/a/47622289)

[code]

    import numpy as np
    A = [2, 4]
    B = np.array([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9],
                  [10, 11, 12],
                  [13, 14, 15]])
    A = [i - 1 for i in A]   # 0始まりの行番号を削除するのでAから1を減じた配列を渡す
    B = np.delete(B, A, axis=0)
    print(B)
    
[/code]


CC BY-SA 4.0
2021-07-01T08:19:41.507
77906
2021-07-01T08:19:41.507
9820
77905
answer


NumPyの[Boolean配列によるIndexing機能](https://numpy.org/doc/stable/user/quickstart.html#indexing-
with-boolean-arrays)を利用した別解です。

[code]

    import numpy as np
    A = [2, 4]
    B = np.array([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9],
                  [10, 11, 12],
                  [13, 14, 15]])
    
    # Bからの行選択用フィルタ配列を用意
    selector = np.ones(len(B), dtype=bool)
    selector[np.array(A) - 1] = False
    # array([ True, False,  True, False,  True])
    
    print(B[selector])
    # array([[ 1,  2,  3],
    #        [ 7,  8,  9],
    #        [13, 14, 15]])
    
[/code]


CC BY-SA 4.0
2021-07-02T01:17:29.173
77913
2021-07-02T01:17:29.173
49
77905
answer