Taking subarrays from numpy array with given stride/stepsize
Извлечение подмассивов из массива numpy с заданным шагом / stepsize
Допустим, у меня есть массив Python Numpy a.
a = numpy.array([1,2,3,4,5,6,7,8,9,10,11])
Я хочу создать матрицу подпоследовательностей из этого массива длиной 5 с шагом 3. Следовательно, матрица результатов будет выглядеть следующим образом:
Модифицированная версия кода @ Divakar с проверкой, чтобы убедиться, что память непрерывна и что возвращаемый массив не может быть изменен. (Имена переменных изменены для моего приложения DSP).
defframe(a, framelen, frameadv): """frame - Frame a 1D array a - 1D array framelen - Samples per frame frameadv - Samples between starts of consecutive frames Set to framelen for non-overlaping consecutive frames
Modified from Divakar's 10/17/16 11:20 solution: https://pythonly.ru/questions/40084931/taking-subarrays-from-numpy-array-with-given-stride-stepsize
CAVEATS: Assumes array is contiguous Output is not writable as there are multiple views on the same memory
"""
ifnotisinstance(a, np.ndarray) or \ not (a.flags['C_CONTIGUOUS'] or a.flags['F_CONTIGUOUS']): raise ValueError("Input array a must be a contiguous numpy array")
# Indexing in the new object will advance by frameadv * element size ostrides = (frameadv*n, n) return np.lib.stride_tricks.as_strided(a, shape=oshape, strides=ostrides, writeable=False)