Bezwzględna różnica dwóch tablic NumPy


Czy istnieje skuteczny sposób/funkcja odejmowania jednej macierzy od drugiej i zapisywania wartości bezwzględnych do nowej macierzy?
Mogę zrobić ten rekord za płytą, ale dla dużych matryc będzie dość wolno ...
Na przykład:
X = [[12,7,3],
[4 ,5,6],
[7 ,8,9]]Y = [[5,8,1],
[6,7,3],
[4,5,9]]for i in range(len(r_0)):
for j in range(len(r)):
delta_r[i][j]= sqrt((r[i][j])**2 - (r_0[i][j])**2)

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli chcesz uzyskać absolutną elementarną różnicę między obiema macierzami, możesz łatwo odjąć je za pomocą NumPy i użyć
numpy.absolute
http://docs.scipy.org/doc/nump ... .html
dla wynikowej macierzy.
import numpy as npX = [[12,7,3],
[4 ,5,6],
[7 ,8,9]]Y = [[5,8,1],
[6,7,3],
[4,5,9]]result = np.absolute(np.array(X) - np.array(Y))


Wyjścia

:
[[7 1 2]
[2 2 3]
[3 3 0]]

Jako alternatywa (

chociaż niepotrzebne
), jeśli trzeba było to zrobić w natywnym Pythonie, można spakować wymiary razem w zagnieżdżonej liście.
result = [[abs(a-b) for a, b in zip(xrow, yrow)]
for xrow, yrow in zip(X,Y)]


Wyjścia

:
[[7, 1, 2], [2, 2, 3], [3, 3, 0]]
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Staje się to trywialne, jeśli rzucisz tablice 2D na tablice numpy:
import numpy as npX = [[12, 7, 3],
[4, 5, 6],
[7, 8, 9]]Y = [[5, 8, 1],
[6, 7, 3],
[4, 5, 9]]X, Y = map(np.array, (X, Y))result = X - Y

Numpy został zaprojektowany do pracy z macierzami w prosty i efektywny sposób.
Mówiłeś też o odejmowaniu macierzy, ale wydawało się, że chcesz podnieść do kwadratu poszczególne elementy, a następnie wziąć pierwiastek kwadratowy z wyniku. Jest to również łatwe do zrobienia z numpy:
result = np.sqrt((A ** 2) - (B ** 2))
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Polecam używanie NumPy
X = numpy.array([
[12,7,3],
[4 ,5,6],
[7 ,8,9]
])Y = numpy.array([
[5,8,1],
[6,7,3],
[4,5,9]
])delta_r = numpy.sqrt(X ** 2 - Y ** 2)

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się