Python 3.x numpy批量按不同值删除列
我想问一下numpy如何按列表批量删除列。 列表中与批次对应的值彼此不同 我知道这个问题可以使用for循环来解决,但它太慢了 谁能给我一些加速的建议吗 阵列(批量大小=3): 删除列表中的索引(批量大小=3) 输出: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,
[[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]])