簡體   English   中英

快速numpy數組擴展

[英]Quick numpy array extension

我想知道是否有一個技巧可以擴展一個在每個原始值之間具有連續數字的numpy數組,直到用戶控制的默認長度。 也許已經有一個內置函數將x變成y

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])

廣播加法可能是最快的

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])

如果為每個子列表添加不同的數量,它將變得更加棘手。

repeat是有用的:

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

tile是另一個很好的工具。

我不知道一個內置功能可以做到這一點,但是您可以通過一些創造力來做到:

>>> 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

這適用於列表:

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)

暫無
暫無

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

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