是否有一种有效的方法/函数可以从另一个矩阵中减去一个矩阵并在新矩阵中写入绝对值? 我可以通过输入进入,但对于大型矩阵,这将是相当慢的......
例如:
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)
答案 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)