2013-04-05 35 views
1

我有一個形狀爲M x N x ... x T的Python numpy N維數組,但我不知道直到運行時數組的維數(排名)。當數組ndim直到運行時才知道如何獲得numpy子數組視圖?

如何創建該數組的子數組的視圖,由具有長度等級的兩個向量指定:extentoffset? 進口numpy的爲NP

def select_subrange(orig_array, subrange_extent_vector, subrange_offset_vector): 
    """ 
    returns a view of orig_array offset by the entries in subrange_offset_vector 
    and with extent specified by entries in subrange_extent_vector. 
    """ 
    # ??? 
    return subarray 

我堅持,因爲我已經找到了切片的實例需要每個維度[ start:end, ... ]條目。

回答

3

如果我理解你的權利,使用

orig_array[[slice(o, o+e) for o, e in zip(offset, extent)]] 

例子:

>>> x = np.arange(4**4).reshape((4, 4, 4, 4)) 
>>> x[0:2, 1:2, 2:3, 1:3] 
array([[[[25, 26]]], 


     [[[89, 90]]]]) 
>>> offset = (0, 1, 2, 1) 
>>> extent = (2, 1, 1, 2) 
>>> x[[slice(o, o+e) for o, e in zip(offset, extent)]] 
array([[[[25, 26]]], 


     [[[89, 90]]]]) 
+0

是的!你的意圖是正確的。該代碼看起來是爲我工作。所以'切片'是新的,但我收集代表'a:b'符號? – NoahR 2013-04-05 19:00:21

+1

@NoahR:是的,請參閱[文檔](http://docs.python.org/2/library/functions.html#slice)。 – BrenBarn 2013-04-05 19:02:27

相關問題