@ Corvus Да, хороший улов - исправлено. таковы опасности редактирования «на месте» вместо простого копирования кода.

имаю, что мой вопрос довольно похож наВекторизация движущегося окна на двумерном массиве, но ответы там не совсем удовлетворяют мои потребности.

Возможно ли сделать векторизованное 2D движущееся окно (скользящее окно), которое включает в себя так называемые краевые эффекты? Какой самый эффективный способ сделать это?

То есть я хотел бы переместить центр движущегося окна по моей сетке так, чтобы центр мог перемещаться по каждой ячейке в сетке. При перемещении вдоль полей сетки эта операция вернет только ту часть окна, которая перекрывает сетку. Если окно полностью находится в сетке, возвращается полное окно. Например, если у меня есть сетка:

array([[1,2,3,4],
       [2,3,4,5],
       [3,4,5,6],
       [4,5,6,7]])

... и я хочу сэмплировать каждую точку в этой сетке, используя3x3 В центре окна в этой точке операция должна возвращать серию массивов или, в идеале, серию представлений в исходный массив следующим образом:

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

array([[1,2],    array([[1,2,3],    array([[2,3,4],    array([[3,4],
       [2,3],           [2,3,4],           [3,4,5],           [4,5],
       [3,4]])          [3,4,5]])          [4,5,6]])          [5,6]])

array([[2,3],    array([[2,3,4],    array([[3,4,5],    array([[4,5],
       [3,4],           [3,4,5],           [4,5,6],           [5,6],
       [4,5]])          [4,5,6]])          [5,6,7]])          [6,7]])

array([[3,4],    array([[3,4,5],    array([[4,5,6],    array([[5,6],
       [4,5]])          [4,5,6]])          [5,6,7]])          [6,7]])

Поскольку мне нужно выполнять эту операцию много раз, важна скорость, и идеальным решением была бы векторизованная операция.

Ответы на вопрос(1)

Ваш ответ на вопрос