2013-06-05 85 views
0

如何創建一個空數組,然後我可以使用hstack與另一個數組填充值?`numpy.hstack`的標識元素

例如在Matlab中,我能做到以下幾點:

a = []; 
b = [10 20]; 
a = [a b]; 

,並會得到

a = 

     10 20 

我要尋找一個在numpy的類似的東西。我試圖

a = np.array([]); 
b = np.array([10, 20]); 
a = np.hstack((a, b)); # should be equal to `b` 

但是,讓

ValueError: all the input array dimensions except for the concatenation axis must match exactly

+0

而且我知道,不預先分配數組是一個壞習慣......它只是爲了快速和骯髒的試用。 –

+1

'numpy.empty'有問題嗎? – kirelagin

+0

是的,它會創建一個包含大小和值的數組。我希望它的大小爲((0,0)),並且不包含任何內容。然後'hstack'應該添加前幾個值。 –

回答

2

使用np.array([])hstack爲我工作。

In [11]: a = array([], dtype=int) 

In [12]: b = array([10, 20]) 

In [13]: c = array([30, 40]) 

In [14]: a = hstack((a,b)) 

In [15]: a 
Out[15]: array([10, 20]) 

In [16]: a = hstack((a,c)) 

In [17]: a 
Out[17]: array([10, 20, 30, 40]) 

對於vstack,初始a的形狀需要一些調整,以使其具有形狀(0,2):

In [22]: a = array([], dtype=int).reshape(-1,2) 

In [23]: a 
Out[23]: array([], shape=(0, 2), dtype=int64) 

In [24]: b 
Out[24]: array([10, 20]) 

In [25]: c 
Out[25]: array([30, 40]) 

In [26]: a = vstack((a,b)) 

In [27]: a 
Out[27]: array([[10, 20]]) 

In [28]: a = vstack((a,c)) 

In [29]: a 
Out[29]: 
array([[10, 20], 
     [30, 40]]) 

注創建的初始值的時候,我用dtype=inta。沒有這個,它使用默認的dtype float,然後當ahstack ed或vstack編輯b,結果是向上浮動。

+0

@kirelagin:我修改了我的答案,說「適合我」。 –

+0

有趣......我從來沒有用'hstack'測試過它。它不適用於'vstack'。 –

+0

你必須調整形狀才能使用'vstack' - 看到我更新的答案。請注意,第一個'vstack'的結果具有形狀(1,2),因此它不完全與'b'相同。 –

2

可以resizea尺寸相匹配的bshape和缺失值填補。這將改變a的大小,並用默認值填充它,爲np.floats這是0.0

a = np.array([]) 
b = np.array([10, 20]) 
a.resize(b.shape) 

np.hstack((a, b)) 
+0

但它會填充值。結果將是'[0 0 10 20]',而不僅僅是[10 20]'。 –

+0

@NilsWerner這是真的,但這是使用numpy數組的結果。 numpy數組如此之快的原因之一是它們佔據了連續的內存塊 - 要做到這一點,它們都需要具有相同的'dtype'。如果你想要一個2,2陣列的浮點數,那麼在其他條目中必須有一個像浮點的對象。 – Hooked