2017-06-03 57 views
1

您可以將numpy的數組轉換成列表,像這樣:是否可以在numpy數組和列表之間進行相互轉換?

a = np.array([x,y,z,...]) 
b = a.tolist() 

我可以通過定義一個新的數組轉換回:

c = np.array(b) 

是否有可能做到這一點的轉換,而無需創建一個新的數組/列表?因此,它會給出以下不存在的功能:

a = np.array([x,y,z,...]) 
a.tolist() 
a.np.array() 

基本上我有一個for循環中,我做了一些數學與nu​​mpy的陣列,以確定要刪除的元素。但是接下來我不得不做下一個沒有這個元素的迭代。我需要的是這樣的列表可變性:

values.tolist() 
values.pop(start_size + i) 
values=np.array(values) 

或者能夠做這樣的事情(這再次,不工作):

new_array = np.delete(values, start_size + i) 
values = new_array 
+1

沒有。這兩個操作每次產生新的對象。底層的數據結構太不同了。 – hpaulj

+0

如果您擴展了您需要執行的各種計算,可能會有所幫助。如果不刪除,可能會有「刪除」元素的方法。即使有一份清單,中間的「流行」也不便宜。 – hpaulj

回答

0

你可以使用np.r_創建漂亮的切片來完成pop

values = np.arange(5) 
i = 2 

popped = values[i] 
values = values[np.r_[0:i, i+1:values.size]] 


print(values, popped) 

[0 1 3 4] 2 
+0

每次彈出一個值時,仍會創建新的數組對象。 – chthonicdaemon

0

這是不可能有一個列表,它就像一個陣列,@hpaulj已經提到。從你對問題的描述看來,好像你可以使用被屏蔽的數組來達到同樣的效果。這裏有一個小例子,我先後從一個數組中刪除最小的元素:

import numpy 
import numpy.ma 

a = numpy.ma.array([5, 3, 4, 2, 5, 1, 6]) 
for i in range(3): 
    minelement = numpy.argmin(a) 
    a[minelement] = numpy.ma.masked 
output = a.compressed() 
+0

我從來沒有使用過屏蔽陣列(這裏是初學者)。你能夠將新數組的長度提供給for循環上限嗎?我正在迭代刪除離羣數據。所以每次我刪除一個外圍的數據點時,我必須在新數組上應用循環。 – pqRS

+0

數組的長度保持不變,只是某些元素被標記爲無效,並且不參與像我的示例中所示的'numpy'操作。如果您要移除異常值,您是否繼續移除,直到停止條件成立爲止? – chthonicdaemon

0

我覺得這是一個臨時的解決問題中的應用,即刪除從數組中的元素,並確定與一個數組一樣的名字。

例如從

a = np.array([0,1,2,3,4]) 
b = a[0:2] 
c = a[3:] 
a = np.append(b,c) 

不幸的是除去2,我已經運行到更大的問題,即更新數組「值」的循環結束不會改變i的最後一個值在環路,這是一個功能len(值)...我得到一個錯誤。

+1

通過考慮你試圖解決的實際問題,然後在一個新的問題中描述這個問題,你將爲自己和我們節省大量的時間。你現在在通往y問題的路上遇到了兩個x問題:http://xyproblem.info/。最好的問題是從最高級別的問題開始,「我試圖去除連續的異常值」,然後詢問中間問題「循環運行到len(值),但我使值更小」。 – chthonicdaemon

相關問題