2014-10-10 41 views
3

有沒有辦法從一維數組中分割零維數組?如何在numpy中從一維數組中提取零維片

例如,如果我有一個N維ndarrayarrarr[0]返回一個(N-1)維ndarray

但是,如果我有一個一維ndarrayxx[0]不返回一個0維ndarray,而是numpy.int64,(如果x包含int64 S)。

最少例如:

def increment(zero_d_array): 
    zero_d_array[...] = zero_d_array + 1 

counter = numpy.array(0) # a zero-dimensional array containing scalar 0 
increment(counter)  # success; counter is now 1 

counters = numpy.zeros(3, dtype=int) # [0, 0, 0] 
increment(counter[1]) # fails; counter[1] is a numpy.int64, not a 0-D array 

我實現上述將與increment(counter[1:2])工作,但這只是因爲increment()發生與兩個0-d和1-d的輸入工作。並非所有功能都會如此靈活。

+0

我不知道有一種方法。 Zero-D數組在Numpy中有點古怪。你是否有理由需要這樣做? – BrenBarn 2014-10-10 17:42:11

+0

我經常發現zero-d數組是一種有用的方法,它具有「裝箱」的基元,就像一個int,我可以傳遞給一個函數,讓它在原地進行修改(無法用純整數進行修改)。正如我在問題中提到的那樣,顯然有一些解決方法,比如使用大小爲1的1-D切片,但這些更加冗長。 – SuperElectric 2014-10-10 17:48:06

+0

是的,但問題是你需要能夠通過切片得到它們嗎?如果你只想保持一個零d的櫃檯,你可以按照你明確的創建它的方式來做。所以我的意思是,你實際上在做什麼,這使得你想要一般地分割和增加任何維度的數組,而不是僅僅讓你的計數器增加它? – BrenBarn 2014-10-10 17:51:44

回答

6

使用省略號:

increment(counter[1, ...])