【发布时间】:2020-11-26 18:03:50
【问题描述】:
在给定一个 nxn 矩阵 M 和一个 n 向量 X 的情况下,是否有一些更快的变体来计算以下矩阵(来自 this paper): ?
我目前计算如下:
#M, X are given as numpy arrays
G = np.zeros((n,n))
for i in range(0,n):
for j in range(i,n):
xi = X[i]
if i == j:
G[i,j] = abs(xi)
else:
xi2 = xi*xi
xj = X[j]
xj2 = xj*xj
mij = M[i,j]
mid = (xi2 - xj2)/mij
top = mij*mij + mid*mid + 2*xi2 + 2*xj2
G[i,j] = math.sqrt(top)/2
这很慢,但我怀疑有一种更好的“numpythonic”方式来代替循环......
编辑:虽然所有答案都有效并且比我的幼稚实现要快得多,但我选择了我基准测试最快的答案。谢谢!
【问题讨论】:
-
X的形状是什么?是向量还是二维数组?
-
@Jalo X 是一个向量,M 是一个二维数组
-
为什么不对所有
G[i, j]使用公式?似乎对角线被简单地分配给 X 并且没有计算下三角形。 -
@swag2198 公式是对称的,所以我只需要矩阵的上三角部分
-
你考虑过 numba 还是 cython?