获取一个numpy数组的所有子序列

发布于 2021-01-29 14:10:17

给定一个大小为numpy的数组n和一个整数,m我想生成m该数组的所有顺序长度子序列,最好是二维数组。

例:

>>> subsequences(arange(10), 4)

array([[0, 1, 2, 3, 4, 5, 6],
       [1, 2, 3, 4, 5, 6, 7],
       [2, 3, 4, 5, 6, 7, 8],
       [3, 4, 5, 6, 7, 8, 9]])

我能想到的最好方法是

def subsequences(arr, m):
    n = arr.size
    # Create array of indices, essentially solution for "arange" input
    indices = cumsum(vstack((arange(n - m + 1), ones((m-1, n - m + 1), int))), 0)
    return arr[indices]

我是否缺少更好的(最好是内置的)功能?

关注者
0
被浏览
116
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是一种非常快速且内存有效的方法,仅是对原始数组的“查看”:

    from numpy.lib.stride_tricks import as_strided
    
    def subsequences(arr, m):
        n = arr.size - m + 1
        s = arr.itemsize
        return as_strided(arr, shape=(m,n), strides=(s,s))
    

    np.copy如果需要写入此数组,则应先做一个步骤,否则,您将修改原始数组和“子序列”数组中的相应条目。

    此处更多信息:https :
    //stackoverflow.com/a/4924433/2379410



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看