获取一个numpy数组的所有子序列
给定一个大小为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]
我是否缺少更好的(最好是内置的)功能?
回答:
这是一种非常快速且内存有效的方法,仅是对原始数组的“查看”:
from numpy.lib.stride_tricks import as_strideddef subsequences(arr, m):
n = arr.size - m + 1
s = arr.itemsize
return as_strided(arr, shape=(m,n), strides=(s,s))
np.copy
如果需要写入此数组,则应先做一个步骤,否则,您将修改原始数组和“子序列”数组中的相应条目。
以上是 获取一个numpy数组的所有子序列 的全部内容, 来源链接: utcz.com/qa/412086.html