2015-10-14 3 views
1

Допустим, у меня есть массив A [I, J], и я хочу, чтобы вычислить новую величину B [I, J], делая что-то вроде:Numpy массив заменить для цикла

for i in arange(1, n): 
    B[i,j+1] = a*A[i-1,j] + b*A[i,j]+ c*A[i+1,j] 

Что Numpy Функциональность я могу использовать, чтобы превратить это в операцию чистого массива?

Я думал о np.cumprod, но неясно, как включить коэффициенты в расчет.

A.shape будет (n + 1, j).

+0

Что такое A.shape? –

ответ

2

Определение A_left = A[:-2, :], A_middle = A[1:-1, :] и A_right = A[2:, :]

Тогда B = a*A_left + b*A_middle + c*A_right

+0

Я думаю, что частью задания будет 'B [1: -1] = ..'. – Divakar

+0

Да, но на самом деле вопрос является некорректным, поскольку, когда i является n-1, последняя строка OP поднимает IndexError. –

+0

Это потому, что OP, скорее всего, имеет A как 'n + 1' как число строк для учета' A [i + 1, j] '. – Divakar

1

Если вы не возражаете, немного обработки сигнала, вы могли бы иметь общее решение (общий в том смысле, в котором вы можете назначить несколько элементов вместе a, b и c для масштабирования элемента от A) с использованием signal.convolve2d.

Это было бы похоже на это other solution, где теория свертки, связанная с такими случаями, рассматривается более подробно. Реализация будет выглядеть так: