2014-02-20 216 views
8

如何刪除數組中的每個第n個元素?Python刪除數組中的每個第n個元素

import numpy as np 

x = np.array([0,10,27,35,44,32,56,35,87,22,47,17]) 
n = 3 # remove every 3rd element 

...有點像x[0::n]的反義詞?我試過這個,但當然這是行不通的:

for i in np.arange(0,len(x),n): 
    x = np.delete(x,i) 

回答

8

你靠近...傳遞整個人氣指數爲子切片刪除,而不是試圖刪除依次對每個元素,如:

import numpy as np 

x = np.array([0,10,27,35,44,32,56,35,87,22,47,17]) 
x = np.delete(x, np.arange(0, x.size, 3)) 
# [10 27 44 32 35 87 47 17] 
+1

這實際上比np.delete(x,slice(None,None,3))要好得多。 – Jaime

+0

@Jaime非常好的觀察 - 沒想到檢查'np.delete'是否帶有本地'slice'對象!儘管有一百萬個數組(事實上它的速度非常慢*),但似乎沒有任何速度上的優勢 - 但很高興知道 - 謝謝。 –

+0

這很奇怪......在我的系統中,移除一個100萬長項目數組的每個第三項大約比使用slice快1.7倍:'a = np.random.rand(1e6); %timeit np.delete(a,np.arange(0,1e6,3)) - > 100循環,最好是3:每循環14.5 ms; %timeit np.delete(a,slice(None,None,3)) - > 100個循環,最好是3:每個循環8.41 ms。 – Jaime

相關問題