Как превратить вектор numpy в матрицу, где каждый столбец в матрице содержит диапазон вокруг соответствующего элемента в начальном векторе? - PullRequest
0 голосов
/ 06 августа 2020

Скажем, у меня есть векторный массив numpy:

array([1, 2, 3])

, и я хочу преобразовать этот вектор в матрицу, где каждый столбец принимает диапазон +/- 2 вокруг соответствующий элемент в начальном векторе, так что моя выходная матрица:

array([[-1,  0,  1],
       [ 0,  1,  2],
       [ 1,  2,  3],
       [ 2,  3,  4],
       [ 3,  4,  5]])

каков наилучший (желательно векторизованный) способ сделать это?

1 Ответ

1 голос
/ 06 августа 2020

Вы можете сделать это с помощью следующего однострочника:

result = a + np.array([-1, 0, 1])[:, np.newaxis]

(я думаю, более элегантное решение).

Результат:

array([[0, 1, 2],
       [1, 2, 3],
       [2, 3, 4]])

Edit

Если диапазон зависит от какого-то параметра, например rng , вы можете сделать это как:

rng = 2   # From x-2 to x+2
result = a + np.arange(-rng, rng + 1)[:, np.newaxis]

получить:

array([[-1,  0,  1],
       [ 0,  1,  2],
       [ 1,  2,  3],
       [ 2,  3,  4],
       [ 3,  4,  5]])
...