2016-10-11 175 views
0

我不知道是否有一個技巧,以連續的 數字在每個原始值之間擴展一個numpy數組,直到用戶控制的默認長度。或許已經有一個內置的功能,輪流X爲Y快速numpy陣列擴展

x=np.array([4,8,4,10]) 

y=np.array([4,5,6,7,8,9,10,11,4,5,6,7,10,11,12,13]) 

在這裏,我添加的每個元件之間的長度爲3。速度是這裏的關鍵。我需要這樣的東西來爲我的列數據創建一個稀疏的 矩陣。

此外,如果我有一個數組如

s=np.array([0,1]) 

是有一個快速的方法來擴展每個元件的 倍的任意量,可以說,4例如:

s=np.array([0,0,0,0,1,1,1,1]) 
+0

對於你的問題的後半部分,看看numpy.repeat或numpy.tile。 – Evert

回答

2

拋秧另外可能是最快的

In [241]: (x[:,None]+np.arange(4)).ravel() 
Out[241]: array([ 4, 5, 6, 7, 8, 9, 10, 11, 4, 5, 6, 7, 10, 11, 12, 13]) 

它會變得棘手如果添加dif每個子列表的不同金額。

repeat是有用的:

In [242]: np.repeat(np.array([0,1]),[3,4]) 
Out[242]: array([0, 0, 0, 1, 1, 1, 1]) 

tile是另一個很好的工具。

+0

所有偉大的方法傢伙,這一個雖然是最快的。馬洛! – Canuck

0

我不知道內置函數,它恰恰說明,但也有一些創意,你可以這樣做:

>>> x=np.array([4,8,4,10]) 
>>> np.array([x+i for i in range(4)]).T.ravel() 
array([ 4, 5, 6, 7, 8, 9, 10, 11, 4, 5, 6, 7, 10, 11, 12, 13]) 

對於你的問題的後半部分,看看numpy.repeatnumpy.tile

0

這部作品名單:

def extend(myList, n): 
    extensions = [range(x, x + n) for x in myList] 
    return [item for sublist in extensions for item in sublist] # flatten 

使用方法如下:

extend([4, 8, 4, 10], 4)