Я довольно новичок в программировании, поэтому прошу прощения, если это классический и тривиальный вопрос. У меня есть 2D-массив 100x100
, который строится с помощью matplotlib
. На этом изображении каждая ячейка имеет свое значение (от 0.0
до 1.0
) и ID (от 0
до 9999
, начиная с верхнего левого угла). Я хочу попробовать матрицу с помощью 2х2 окна, которое производит два словарей перемещения:Как образец огромного 2D-массива в Python с использованием массивов 2x2 для создания словаря? (Алгоритм Stencil для Python)
- первого словарь: ключ представляет собой пересечение 4-клеток; значение представляет кортеж с идентификаторами 4 соседних ячеек (см. изображение ниже - пересечение представлено «N»);
- 2-й словарь: ключ представляет собой пересечение 4 ячеек; значение представляет собой среднее значение 4 соседних ячеек (см. изображение ниже).
В приведенном ниже примере (верхняя левая панель), где Н имеет ID = 0, 1-ый словарь даст {'0': (0,1,100,101)}
, так как клетки пронумерованы от 0 до 99 по направлению к правой стороне и от 0 до 9900, step = 100, меньше. Второй словарь даст {'0': 0.775}
, так как 0.775 - это среднее значение 4 соседних ячеек N. Конечно, эти словари должны иметь столько ключей, сколько «пересечений», которые у меня есть на двумерном массиве.
Как это можно сделать? И в этом случае словари являются лучшим «инструментом»? Спасибо вам, ребята!
PS: Я попробовал свой собственный путь, но мой код является неполным, не так, и я не могу получить мою голову вокруг него:
a=... #The 2D array which contains the cell values ranging 0.0 to 1.0
neigh=numpy.zeros(4)
mean_neigh=numpy.zeros(10000/4)
for k in range(len(neigh)):
for i in a.shape[0]:
for j in a.shape[1]:
neigh[k]=a[i][j]
...
Я не знаю, если это может помочь, но по крайней мере я могу сказать что то, что вы описываете, широко известно как алгоритм трафарета, который является своего рода 2D-фильтром с конечным импульсным откликом. Если у вас есть образцы «S» и заданы ваши шаблоны, вы должны рассмотреть возможность перемещения матрицы от 1 до S (не от 0 до S) и применять любую операцию, которую вы описываете. – Emilien
Это начало :) Спасибо в любом случае! – FaCoffee