2014-09-24 100 views
0

我有一個熊貓系列每個條目都有一個numpy數組(每個條目的長度相同),我想將其轉換爲2D numpy數組。我相信我已經讀過Series和DataFrames在裝容器時表現不佳,但長話短說,很不幸,你從一系列的每個組調用np.histogram(.,.)[0]得到的結果,這是我所追求的(分發直方圖)。Unnesting Numpy Arrays

無論哪種方式,我想從我的系列中檢索2D numpy數組。目前,如果我做my_series.values()我得到這個:

array([array([0, 0, 0, ..., 1, 0, 0]), array([0, 0, 0, ..., 0, 0, 0]), 
     array([0, 0, 0, ..., 0, 0, 0]), ..., array([0, 0, 0, ..., 0, 0, 0]), 
     array([0, 0, 0, ..., 0, 0, 0]), array([0, 0, 0, ..., 0, 0, 0])], dtype=object) 

this thread該解決方案並沒有在這裏工作(np.array沒有自動解決最終的數據結構爲一個二維數組)。

如何從這個數據結構「展平」這個二維數組? (注意:result.flatten()不會做的伎倆,也沒有np.array(result),都返回原來的結構)

+0

所有的子陣列都有相同的形狀? – hpaulj 2014-09-24 19:24:59

回答

4

使用np.vstack以層疊列表/陣列/不管行:

>>> A = np.empty(2, dtype=object) 
>>> A[0] = array([0, 0, 0]) 
>>> A[1] = array([1, 2, 3]) 
>>> A 
array([array([0, 0, 0]), array([1, 2, 3])], dtype=object) 
>>> np.vstack(A) 
array([[0, 0, 0], 
     [1, 2, 3]]) 
+1

令人驚訝的是,@ behzad.nouri的刪除解決方案比NumPy 1.8.2中的np.arange(10)的長度爲2000的陣列要快。 Behzad,如果你取消退出,我會贊成。 (雖然我的解決方案贏得內部數組較大,但是。) – 2014-09-24 13:48:55

+1

未刪除,但我認爲'np.vstack'更清潔 – 2014-09-24 14:18:37

2

可能:

>>> xs 
array([array([1, 2, 3]), array([4, 5, 6])], dtype=object) 
>>> xs.shape 
(2,) 
>>> np.array(xs.tolist()) # or, np.asarray(xs.tolist()) 
array([[1, 2, 3], 
     [4, 5, 6]]) 
>>> np.array(xs.tolist()).shape 
(2, 3)