Python 3.x numpy批量按不同值删除列

Python 3.x numpy批量按不同值删除列,python-3.x,numpy,Python 3.x,Numpy,我想问一下numpy如何按列表批量删除列。 列表中与批次对应的值彼此不同 我知道这个问题可以使用for循环来解决,但它太慢了 谁能给我一些加速的建议吗 阵列(批量大小=3): 删除列表中的索引(批量大小=3) 输出: [[0, 1, 5, 6], [0, 3, 4, 5], [2, 3, 4, 6]] 假设数组是2d,并且索引每行删除的元素数相等,我们可以使用布尔掩码删除项: In [289]: arr = np.array([[0, 1, 2, 3, 4, 5, 6], [0, 1, 2,

我想问一下numpy如何按列表批量删除列。 列表中与批次对应的值彼此不同

我知道这个问题可以使用for循环来解决,但它太慢了

谁能给我一些加速的建议吗

阵列(批量大小=3):

删除列表中的索引(批量大小=3)

输出:

[[0, 1, 5, 6], [0, 3, 4, 5], [2, 3, 4, 6]]

假设数组是2d,并且索引每行删除的元素数相等,我们可以使用布尔掩码删除项:

In [289]: arr = np.array([[0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6]] 
     ...: )                                                                                                     
In [290]: idx = np.array([[2, 3, 4], [1, 2, 6], [0, 1, 5]])                                                     
In [291]: mask = np.ones_like(arr, dtype=bool)                                                                  
In [292]: mask[np.arange(3)[:,None], idx] = False                                                               
In [293]: arr[mask]                                                                                             
Out[293]: array([0, 1, 5, 6, 0, 3, 4, 5, 2, 3, 4, 6])
In [294]: arr[mask].reshape(3,-1)                                                                               
Out[294]: 
array([[0, 1, 5, 6],
       [0, 3, 4, 5],
       [2, 3, 4, 6]])
[[0, 1, 5, 6], [0, 3, 4, 5], [2, 3, 4, 6]]
In [289]: arr = np.array([[0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6]] 
     ...: )                                                                                                     
In [290]: idx = np.array([[2, 3, 4], [1, 2, 6], [0, 1, 5]])                                                     
In [291]: mask = np.ones_like(arr, dtype=bool)                                                                  
In [292]: mask[np.arange(3)[:,None], idx] = False                                                               
In [293]: arr[mask]                                                                                             
Out[293]: array([0, 1, 5, 6, 0, 3, 4, 5, 2, 3, 4, 6])
In [294]: arr[mask].reshape(3,-1)                                                                               
Out[294]: 
array([[0, 1, 5, 6],
       [0, 3, 4, 5],
       [2, 3, 4, 6]])