Я новичок в программировании, поэтому прошу прощения, если это классический и тривиальный вопрос. У меня есть 100x100
2D-массив значений, который построен с помощью matplotlib
. На этом изображении каждая ячейка имеет свое значение (от 0.0
до 1.0
) и идентификатор (от 0
до 9999
, начиная с левого верхнего угла). Я хочу сэмплировать матрицу, используя движущееся окно 2x2, которое создает два словаря:
- 1-й словарь: ключ представляет собой пересечение 4 ячеек; значение представляет кортеж с идентификаторами 4 соседних ячеек (см. изображение ниже — пересечение представлено "N");
- 2-й словарь: ключ представляет пересечение 4 ячеек; значение представляет собой среднее значение 4 соседних ячеек (см. изображение ниже).
В приведенном ниже примере (верхняя левая панель), где N имеет ID=0, первый словарь даст {'0': (0,1,100,101)}
, поскольку ячейки пронумерованы от 0 до 99 справа и от 0 до 9900, step= 100, вниз. Второй словарь даст {'0': 0.775}
, так как 0,775 — это среднее значение 4 соседних ячеек N. Конечно, эти словари должны иметь столько ключей, сколько «пересечений» у меня есть в 2D-массиве.
Как это можно сделать? И являются ли словари лучшим «инструментом» в этом случае? Спасибо, ребята!
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]
...
S
сэмплов и с учетом вашего шаблона, вам следует подумать о переходе матрицы от 1 до S (не от 0 до S) и применить любую операцию, которую вы описываете. - person Emilien   schedule 19.10.2015