2015-10-26 112 views

回答

11

你有權限訪問這些函數的代碼嗎?除np.concatenate以外,所有內容均以Python編寫。使用IPython shell,您只需使用??

如果不是,這裏是他們的代碼摘要:

vstack 
concatenate([atleast_2d(_m) for _m in tup], 0) 
i.e. turn all imputs in to 2d (or more) and concatenate on first 

hstack 
concatenate([atleast_1d(_m) for _m in tup], axis=<0 or 1>) 

colstack 
transform arrays with (if needed) 
    array(arr, copy=False, subok=True, ndmin=2).T 

append 
concatenate((asarray(arr), values), axis=axis) 

換句話說,他們都通過調整輸入數組的大小,然後連接上右軸工作。它們只是便利功能。

+0

「你有權訪問這些函數的代碼嗎?」 - numpy是[開源](https://github.com/numpy/numpy) – Annan

3

在IPython中,您可以通過輸入其名稱後跟??來查看函數的源代碼。在hstack縱觀我們可以看到,它實際上只是圍繞concatenate的包裝(類似與vstackcolumn_stack):

np.hstack?? 
def hstack(tup): 
... 
    arrs = [atleast_1d(_m) for _m in tup] 
    # As a special case, dimension 0 of 1-dimensional arrays is "horizontal" 
    if arrs[0].ndim == 1: 
     return _nx.concatenate(arrs, 0) 
    else: 
     return _nx.concatenate(arrs, 1) 

所以我想只使用哪一個具有最合乎邏輯美其名曰給你。

2

numpy.vstack:在序列堆疊陣列垂直(行明智).Equivalent到np.concatenate(tup, axis=0)例如參見:https://docs.scipy.org/doc/numpy/reference/generated/numpy.vstack.html

numpy.hstack:在序列堆棧陣列水平地(逐列).Equivalent到np.concatenate(tup, axis=1) 。例子見: https://docs.scipy.org/doc/numpy/reference/generated/numpy.hstack.html

append是python的內置數據結構list的一個函數。每次將元素添加到列表中。顯然,要添加多個元素,您將使用extend。簡而言之,numpy的功能要強大得多。

例如:

假設gray.shape =(N0,N1)

np.vstack((gray,gray,gray))將有形狀(N0 * 3,N1),你也可以通過np.concantenate((gray,gray,gray),axis=0)

np.hstack((gray,gray,gray))這樣做將有形狀(n0,n1 * 3),你也可以通過np.concantenate((gray,gray,gray),axis=1)

np.dstack((gray,gray,gray))將形狀(n0,n1,3)。

相關問題