2017-03-15 45 views
4

我是python和numpy的新手(我更習慣於R),並且一直在創建數組,並且想創建一個高數組,並且想要創建一個高數組,並且第一列只是一個範圍自定義增量,第二列是0到1之間的單一隨機數。用numpy生成高大的數組

我已經拿出了下面的內容,但它看起來很笨重,並且沒有特別的可讀性。是否有更有效的方法在一條線上實現相同的結果?

import numpy as np 

1stcol = np.array(np.arange(1,20,0.5), ndmin=2) 
2ndcol = np.array(np.random.uniform(0,1,np.shape(d)[1]), ndmin=2) 
tallmat = np.transpose(np.concatenate((d,e),axis=0)) 
+0

或者擺脫輸入數組的額外維數來獲得一維數組,並使用快捷鍵np.c_ [a,b]有時比* pin選項更容易記住 – NaN

回答

1

1stcol不是有效的變量名稱。

就效率而言這很難被打敗。

In [159]: d = np.array(np.arange(1,20,0.5), ndmin=2) 
    ...: e = np.array(np.random.uniform(0,1,np.shape(d)[1]), ndmin=2) 
    ...: tallmat = np.transpose(np.concatenate((d,e),axis=0)) 

de簡單表述爲:

d = np.arange(1,20,0.5)[None,:] 
e = np.random.uniform(0,1,d.shape) 

您可以構建更簡單的一維數組

In [160]: a = np.arange(1,20,0.5) 
    ...: b = np.random.uniform(0,1,np.shape(d)[1]) 

但是,加入他們將不得不擴大尺寸的任何功能和/或以另一種方式換位。所以整體工作會很相似。您的解決方案雖然「笨拙」,但它展示了連接所需維度問題的知識。

隨着一維數組,這些所有的工作

np.column_stack((a,b)) 
np.c_[a,b] 
np.stack((a,b),axis=-1) 
np.array((a,b).T 

我爲de簡單的表情表明另一個構造 - 使輸入(N,1)從一開始:

In [171]: d = np.arange(1,20,0.5)[:,None] 
In [172]: e = np.random.uniform(0,1,d.shape) 
In [173]: tallmat = np.concatenate((d,e), axis=1) 
+0

作爲一個新的語言,這是我期待的綜合分析。嘗試獲得最佳實踐感等等非常感謝! – intransit

3

鑑於兩列將被堆疊成兩列,以獲得高大陣列,在這裏與np.vstacknp.row_stacknp.dstack幾種方法 -

np.vstack((d,e)).T 
np.row_stack((d,e)).T 
np.dstack((d,e))[0] 

或者,我們可以從1D陣列開始,並以np.column_stack結尾堆棧,像這樣 -

d = np.arange(1,20,0.5) 
e = np.random.uniform(0,1,np.shape(d)[1]) 
tallmat = np.column_stack((d,e)) 
+0

非常感謝,我沒有意識到這些 - 將嘗試它們! – intransit