2017-07-27 76 views
2

我有一個數組的NumPy數組(長度爲X),它們的長度都是相同的(Y),但是它具有類型「對象」,因此具有維度(X,)。我想用成員數組元素的類型(「float」)將它「轉換」爲維數組(X,Y)。如何在Python中將數組數組轉換爲多維數組?

我可以看到這樣做的唯一方法,這是「手動」的東西,如

[x for x in my_array] 

是否有完成這個「轉換」更好的成語?


例如我有類似:

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

具有shape(X),而不是(X,10)。

+0

你是如何得到這個數組的?這種事通常意味着你在程序的早些時候做了錯誤的事情。我懷疑這些子陣列的長度並不相同。 – user2357112

+0

np.transpose(your_array).astype(float) –

+0

@ Mr_U4913:「ValueError:使用序列設置數組元素」 – orome

回答

2

您可以連接新軸上的陣列。例如:

In [1]: a=np.array([1,2,3],dtype=object) 
    ...: b=np.array([4,5,6],dtype=object) 

爲了使一個數組的數組,我們不能只是array將它們結合起來,與已刪除的答案做:

In [2]: l=np.array([a,b]) 
In [3]: l 
Out[3]: 
array([[1, 2, 3], 
     [4, 5, 6]], dtype=object) 
In [4]: l.shape 
Out[4]: (2, 3) 

相反,我們必須創建右側空數組形狀,填充:

In [5]: arr = np.empty((2,), object) 
In [6]: arr[:]=[a,b] 
In [7]: arr 
Out[7]: array([array([1, 2, 3], dtype=object), 
       array([4, 5, 6], dtype=object)], 
       dtype=object) 

np.stack行爲像np.array,但使用concatenate

In [8]: np.stack(arr) 
Out[8]: 
array([[1, 2, 3], 
     [4, 5, 6]], dtype=object) 
In [9]: _.astype(float) 
Out[9]: 
array([[ 1., 2., 3.], 
     [ 4., 5., 6.]]) 

我們也可以使用concatenatehstackvstack到陣列上不同的軸結合。它們都將數組數組視爲數組列表。

如果arr是2d(或更高),我們必須先ravel

+0

它看起來就像'堆棧'(W/O'astype')就是訣竅。 – orome