2016-04-08 270 views
1
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) 

这将返回从与NumPy阵列的每一行中删除一个元素

[] 

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

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

我要删除第一个元素(索引为0),[1]中的第二个(索引为1),以及[2]中的第三个(索引为2)。

有什么想法?

+0

好奇,如果解决方案发布这里适合你吗? – Divakar

回答

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]]) 
相关问题