[алгоритмическая задачка]тупняк
строки и столбцы не перепутал?
for i in range(N):мне кажется, что последнее i в нижней строке надо заменить на j. ну или первое. а то результат от j не зависит
Sigma_x0[i] += GFinv[(i+j)%N, i]
, что если элемент выходит за пределы текущей строки, то надо рассматривать элемент из начала следуещей строки.
Sigma_x0[i] += GFinv[(i+j)%N, i]
и где в твоём коде переход на следующую строку?
если элемент выходит за пределы текущей строки, то надо рассматривать элемент из начала следуещей строки.Я не понял вот этот момент: т.е. для нулевой строки просто суммируем строку, для первой — строку без первого элемента, но прибавляем первый элемент следующей т.е. второй строки, так? Как тогда обходиться с последней строкой, ее игнорировать?
Но если я понял правильно, тогда остается просто в нужные момент при суммировании увеличить номер строки, т.е.:
Sigma_x0[i] += GFinv[(i+j)%N, i + i+j)div N) ]
Ну и здесь опять же тонкий момент — нумерация с 0 или с 1? Если вдруг с 1, тогда надо еще думать как от (i+j)%N получить правильный индекс.
элемент из начала следуещей строки.угу. сразу не заметил
00+11, 01+12,..., 0n-1+10
и так далее.
пусть есть матрица:
1 2 3
4 5 6
7 8 9
Для нее:
sum(0) = 1 + 2 + 3 = 6
sum(1) = 5 + 6 + 7 = 18
sum(2) = 9 + 1 + 2 = 12
Я правильно понял условие задачи?
Тогда мое решение выше надо еще чуть модифицировать:
Sigma_x0[i] += GFinv[(i+j)%N, (i + i+j)div N%N ]
1 2 3
4 5 6
7 8 9
1+5+9 = 15, 2+6+7 = 15, 3+4+8 = 15
(i+j)%Nразве не делает этого?
у тебя индексы от 0 до н-1 или все же от 1 до н?
индексы 0...N=ls*ls, индекс строк - i, j - индекс столбцов
for j in range(N):для всех j От 1до н или для всех j от 0 до н?
а нумерация в массивах в твоем языке с нуля идет или с 1?
индексация с 0
Да, это Python, "for i in range(N):" это цикл по переменной i от 0 до N-1.
1 2 3
4 5 6
7 8 9
тогда просто надо брать модуль не по N, а по (N+1). А так — в твоей формулировке твой остальной код правилен.
в то же время сравнение на конкретном примере дает неверный результат.пример и результат в студию
Я предлагаю воспользоваться отладчиком.
За идеи и подсказки спасибо, я сейчас отдохну, сделаю выводы из того что тут написали, и проверю. О результатах отпишусь.
я конечно сейчас уже совсем запутался, но это явно не правильно
Пример показать сложно, потому что я проверяю это на матрице...мля. вбей в своей проге ручками матрицу и запусти на ней свое вычисление сумм. и скажи нам что получишь
def fancy_sum(m):
nrows, ncols = m.shape
out = np.zeros(ncols)
for col in range(ncols):
for row in range(nrows):
out[col] += m[row, (row + col)%ncols]
return out
m1 = array([[1, 2, 3], [4, 5, 6], [7, 8, 9])
fancy_sum(m1)
array([ 15., 15., 15.])
Это то что тебе нужно?
def fancy_sum2(m):
nrows, ncols = m.shape
return [summ[row, (col+row)%ncols] for row in xrange(nrows
for col in xrange(ncols)]
см. второй ответ в теме
не знаю, о чём тут дальше говорить, ясно же где была опечатка
Да. Поэтому и стоит иногда называть переменные для строк и столбцов соответствующими словами — чтобы сложнее было запутаться
Проблема пока еще остается в том, что я проверял на матрице обладающей более хитрой симметрией, поэтому результат сравнения среднего по строкам вычисленный предлагаемым способом с первой строкой был неверный. Сейчас вот сижу думаю как надо правильно суммировать. Спасибо , действительно, как только обозначил i за ri (row index) и j за ci (column index) сразу все прозрачней стало.
Может это Real Index и Complex Index... или right invariant и central invariant... или может что еще...
В общем, что тебе мешает назвать переменные row и column ? Длинное слово column — сократи до col, хотя если назвать column то это уже никаких разночтений не вызовет.
не вопрос, просто у меня такое обозначение можно скзать традиционное (много где использованно ну и комментарий можно оставить. Просто column у меня ассоцируется именно с колонкой, а column index - с номером колонки, вот и все.
Оставить комментарий
darin06
Дано: квадратная матрица, NxN.Необходимо просуммировать поэлементно все ее строки, со сдвигом на номер строки, понимая, что если элемент выходит за пределы текущей строки, то надо рассматривать элемент из начала следуещей строки.
Я делаю так:
Кажется что все правильно, но в то же время сравнение на конкретном примере дает неверный результат.
Вобщем, кто что скажет?