2017-08-29 51 views
1

我有一個包含形狀(2400,2)的多維數組的數據集。Numpy修改多維數組中的每個陣列與一個範圍

我希望能夠採取這些2400行中的每一行,並將它們修改爲從開始點和結束點(2400行中的每一行中的兩個元素)的範圍。範圍始終是相同的長度(在我的情況下,長度爲60)。

舉例來說,如果我有這樣的事情:

array([[ 78, 82], 
     [ 90, 94], 
     [ 102, 106]]) 

我的輸出應該是這樣的:

array([[ 78, 79, 80, 81, 82], 
     [ 90, 91, 92, 93, 94], 
     [ 102, 103, 104, 105, 106]]) 

我已經能夠做到這一點的唯一方法是用對循環,但我試圖避免循環每行,因爲數據集可能會變得非常大。

謝謝!

回答

0

由於必然全部aranges的需要同樣長,我們可以在第一個條目中創建一個arange,然後將其複製給其他人。

例如:

x = np.array([[78, 82], 
       [90, 94], 
       [102, 106]]) 

>>> x[:, :1] + np.arange(0, 1 + x[0, 1] - x[0, 0]) 
# array([[ 78, 79, 80, 81], 
#  [ 90, 91, 92, 93], 
#  [102, 103, 104, 105]]) 
0

如果第二列和第一列之間的差值總是4,那麼你就可以提取的第一列,並添加[0,1,2,3,4]數組它:

arr = np.array([[ 78, 82], 
       [ 90, 94], 
       [ 102, 106]]) 

arr[:,:1] + np.arange(5) 
Out[331]: 
array([[ 78, 79, 80, 81, 82], 
     [ 90, 91, 92, 93, 94], 
     [102, 103, 104, 105, 106]])