Понимание процесса прохождения по диагонали матрицы - PullRequest
0 голосов
/ 15 февраля 2020

Здравствуйте!

Недавно я наткнулся на проблему, связанную с циклическим просмотром диагоналей матрицы. Я не знал, как это сделать, поэтому я нашел ответ здесь и нашел this , где пользователь @Nemo предоставил хороший ответ, для которого другой пользователь @BioGeek предоставил реализацию, Я не совсем понимаю одну часть реализации и хотел бы помочь с ее пониманием, поскольку я новичок в программировании и не особенно опытный / опытный (ДА!) .

Реализация:

import itertools as IT

mat = [[3,3,1,1],
       [2,2,1,2],
       [1,1,1,2]]

""" @BioGeeks implementation """
r, c = len(mat), len(mat[0])

print([ [mat[r-1-q][p-q] for q in range(min(p, r-1), max(0, p-c+1)-1, -1)] for p in range(r+c-1)])                             
# [[1], [2, 1], [3, 2, 1], [3, 1, 2], [1, 2], [1]]

""" My interpretation """
diagonals = []
for p in range(r+c-1):
    diag = []
    for q in range(min(p, r-1), max(0, p-c+1)-1, -1):
        diag.append(mat[r-1-q][p-q])
    diagonals.append(diag)

print(diagonals)
# [[1], [2, 1], [3, 2, 1], [3, 1, 2], [1, 2], [1]]

Часть, которую я не до конца понимаю:

Я ищу объяснение относительно этого внутреннего l oop.

for q in range(min(p, r-1), max(0, p-c+1)-1, -1):
        diag.append(mat[r-1-q][p-q])

1) Как получается, что диапазон, в котором мы l oop, составляет от min(p, r-1) до max(0, p-c+1)- в обратном направлении?

2) Почему "x-координата" равна [r-1-q], а "y-координата" равна [p-q]?

p = номер диагонали.

q = индекс по диагонали.

r = # строк

c = # протоколы

У меня есть части, но мне трудно собрать их вместе, чтобы собрать весь кадр.

...