2017-08-29 64 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]])