两个NumPy数组的绝对差异

时间:2016-07-04 07:40:03

标签: python arrays numpy

是否有一种有效的方法/函数可以从另一个矩阵中减去一个矩阵并在新矩阵中写入绝对值? 我可以通过输入进入,但对于大型矩阵,这将是相当慢的......

例如:

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)

3 个答案:

答案 0 :(得分:4)

如果您想要两个矩阵之间的绝对元素差异,您可以使用NumPy轻松地减去它们,并在结果矩阵上使用numpy.absolute

import numpy as np

X = [[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))

<强>输出

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

或者(虽然不必要),如果您需要在本机Python中这样做,您可以在嵌套列表理解中将维度压缩在一起。

result = [[abs(a-b) for a, b in zip(xrow, yrow)]
          for xrow, yrow in zip(X,Y)]

<强>输出

[[7, 1, 2], [2, 2, 3], [3, 3, 0]]

答案 1 :(得分:2)

如果将2D数组转换为numpy数组,这样做会变得微不足道:

import numpy as np

X = [[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旨在通过矩阵轻松高效地工作。

另外,你谈到了减去矩阵,但你似乎也想要对各个元素进行平方,然后在结果上取平方根。 numpy也很容易:

result = np.sqrt((A ** 2) - (B ** 2))

答案 2 :(得分:0)

我建议使用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)