Eri*_*rik 4 python arrays numpy
给定一个大小n和整数的numpy数组,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]])
Run Code Online (Sandbox Code Playgroud)
我能做到这一点的最好方法是
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]
Run Code Online (Sandbox Code Playgroud)
是否有一个更好的,最好是内置的功能,我错过了?
scipy.linalg.hankel 做这个.
from scipy.linalg import hankel
def subsequences(v, m):
return hankel(v[:m], v[m-1:])
Run Code Online (Sandbox Code Playgroud)
小智 5
这是一种非常快速且内存高效的方法,这只是原始数组的“视图”:
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))
Run Code Online (Sandbox Code Playgroud)
np.copy如果您需要写入此数组,则应先创建一个,否则您将同时修改原始数组和“子序列”数组中的相应条目。
更多信息在这里:https : //stackoverflow.com/a/4924433/2379410
| 归档时间: |
|
| 查看次数: |
1747 次 |
| 最近记录: |