簡體   English   中英

numpy切片返回最后兩個維度

[英]numpy slice to return last two dimensions

基本上,我正在尋找一種函數或語法,該函數或語法將允許我獲取具有任意數量維的維numpy數組最后兩個維的第一個“切片”。

我可以這樣做,但是很難忍受,如果有人發送6d數組怎么辦? 必須有一個像橢圓這樣的numpy函數,它可以擴展為0,0,0,...而不是:,:,:,...

data_2d = np.ones(5**2).reshape(5,5)
data_3d = np.ones(5**3).reshape(5,5,5)
data_4d = np.ones(5**4).reshape(5,5,5,5)

def get_last2d(data):
    if data.ndim == 2:
        return data[:]
    if data.ndim == 3:
        return data[0, :]
    if data.ndim == 4:
        return data[0, 0, :]

np.array_equal(get_last2d(data_3d), get_last2d(data_4d))

謝謝,科林

這個怎么樣,

def get_last2d(data):
    if data.ndim <= 2:
        return data
    slc = [0] * (data.ndim - 2)
    slc += [slice(None), slice(None)]
    return data[slc]
def get_last_2d(x):
    m,n = x.shape[-2:]
    return x.flat[:m*n].reshape(m,n)

之所以可行,是因為對數組進行展平將按快速變化的索引順序返回條目,並且對於C風格的索引,最后的索引變化最快。 因此,平整數組的前m * n個條目就是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM