2013-04-11 66 views
2

numpy提供了三個方便的例程來將數組變成至少一維,二維或三維數組,例如,通過numpy.atleast_3d如何返回至少4D的數組:有效的方法來模擬numpy.atleast_4d

我需要一個維度的等價物:atleast_4d。我可以想到使用嵌套if語句的各種方法,但我想知道是否有更有效和快速的方法返回有問題的數組。在你的回答中,如果可以的話,我會有興趣看到執行速度的估計值(O(n))。

+0

加入時,它應該在哪裏第四維度去?作爲另一個尾隨維度,還是另一個主要維度? – talonmies 2013-04-11 05:24:04

+0

@talonmies優先追蹤 – DrSAR 2013-04-11 05:24:57

+1

執行速度爲O(1),不管是哪種方法,都不是O(n)。 – seberg 2013-04-11 08:50:40

回答

5

np.array方法有一個可選關鍵字ndmin論點,即:

指定結果數組 應有尺寸的最小數目。將根據需要預先設置形狀以符合 這一要求。

如果你也設置copy=False你應該接近你以後的東西。


這樣做它自己的選擇,如果你想額外維度尾隨而不是領導:

arr.shape += (1,) * (4 - arr.ndim) 
+2

你自己動手的方法很漂亮。我花了一段時間來解碼。記錄:'''(1,)*(4 - arr.ndim)'''創建一個元組。如果arr.ndim大於4或長度合適,則元組爲空。這些維度只是被標記到數組上。美麗。 – DrSAR 2013-04-11 21:54:36

1

爲什麼不可以僅僅是這麼簡單的東西:

def atleast_4d(x): 
    if x.ndim < 4: 
     y = expand_dims(np.atleast_3d(x), axis=3) 
    else 
     y = x 

    return y 

即。如果維數小於4,則調用atleast_3d並在末尾附加一個額外的維度,否則返回數組不變。