快速numpy数组扩展

时间:2016-10-11 00:28:13

标签: python arrays numpy

我想知道是否有连续扩展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])

3 个答案:

答案 0 :(得分: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])

如果为每个子列表添加不同的金额会变得更加棘手。

repeat很有用:

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

tile是另一个好工具。

答案 1 :(得分: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

答案 2 :(得分: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)