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]]
我想从[0]删除第一个元素(索引为0),从[1]删除第二个元素(索引为1),从[2]删除第三个元素(索引为2)。
有什么想法吗?
答案 0 :(得分:1)
以下是使用boolean indexing
-
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]])