从NumPy数组的每一行中删除一个元素

4
import numpy as np
a=np.array([[1,2,3], [4,5,6], [7,8,9]])

k = [0, 1, 2]

print np.delete(a, k, 1)

这段代码返回:

这将返回

[]

但是,我真正想要的结果是

[[2,3],
 [4,6],
 [7,8]]

我想从a [0]中删除第一个元素(索引为0),从a [1]中删除第二个元素(索引为1),从a [2]中删除第三个元素(索引为2)。 有什么想法吗?

想知道这里发布的解决方案是否适用于您? - Divakar
1个回答

4

这里有一种使用布尔索引的方法-

m,n = a.shape
out = a[np.arange(n) != np.array(k)[:,None]].reshape(m,-1)

如果您想使用np.delete,您可以先计算线性索引,然后在将输入数组展平后删除这些索引,具体操作如下 -

m,n = a.shape
del_idx = np.arange(n)*m + k
out = np.delete(a.ravel(),del_idx,axis=0).reshape(m,-1)

示例运行 -


In [94]: a
Out[94]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

In [95]: k = [0, 2, 1]

In [96]: m,n = a.shape

In [97]: a[np.arange(n) != np.array(k)[:,None]].reshape(m,-1)
Out[97]: 
array([[2, 3],
       [4, 5],
       [7, 9]])

In [98]: del_idx = np.arange(n)*m + k

In [99]: np.delete(a.ravel(),del_idx,axis=0).reshape(m,-1)
Out[99]: 
array([[2, 3],
       [4, 5],
       [7, 9]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接