Шумная векторизация различий в двумерном массиве - PullRequest
1 голос
/ 20 марта 2012

Я бы хотел векторизовать разницу двух массивов M x N в разных срезах в NumPy. Примерно так:

dA = A[1:,:] - A[:-1,:]
dB = B[:,1:] - B[:,:-1]
C = dA * dB

Но поскольку dA - это (M-1) x N, а dB - это M x (N-1), это недопустимая операция.

Другими словами, есть ли способ векторизовать этот цикл в NumPy?

for i in range(M-1):
    for j in range(N-1):
        C[i,j] = (A[i+1,j] - A[i,j])*(B[i,j+1] - B[i,j])

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

Похоже, что вы хотите:

dA = A[1:, :-1] - A[:-1, :-1]
dB = B[:-1, 1:] - B[:-1, :-1]
C = dA * dB
2 голосов
/ 20 марта 2012

Вы также можете использовать функцию numpy.diff

    np.diff(A, axis=0)[:, :-1] * np.diff(B, axis=1)[:-1, :]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...