2016-04-08 272 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]]) 
相關問題