нарезка массива, без цикла for - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть вопрос, как я могу создать массив фрагментов из массива numpy. Я могу сделать это с помощью цикла, то, что я пытаюсь сделать, это:

def calc_matrix(arr, k): 
    x = np.zeros((len(arr) - k + 1, k))
    for i in range(len(arr) - k + 1):
        x[i, :] = arr[i: (i+k)]
    return x

1 Ответ

0 голосов
/ 26 апреля 2018

Вы можете вырезать желаемый результат из матрицы Ханкеля arr (и произвольного второго параметра; ниже мы опускаем его полностью, в этом случае по умолчанию используются нули):

>>> import numpy as np                                                                                              
>>> from scipy import linalg
>>>
>>> arr = np.arange(10)**2 % 7   ##  just a random example      
>>> arr
array([0, 1, 4, 2, 2, 4, 1, 0, 1, 4])                                            
>>> k = 4                                                                                                           
>>> linalg.hankel(arr)[:arr.size-k+1, :k]                                              
array([[0, 1, 4, 2],                                                                                                
       [1, 4, 2, 2],                                                                                                
       [4, 2, 2, 4],                                                                                                
       [2, 2, 4, 1],                                                                                                
       [2, 4, 1, 0],
       [4, 1, 0, 1],
       [1, 0, 1, 4]])

Или вы можете использовать http://scikit -image.org / docs / dev / api / skimage.util.html # skimage.util.view_as_windows .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...