【发布时间】:2015-03-13 20:30:51
【问题描述】:
我有两个矩阵A 和B,每个矩阵的大小为NxM,其中N 是样本数,M 是直方图箱的大小。因此,每一行代表该特定样本的直方图。
我想做的是为不同的一对样本计算两个矩阵之间的chi-square 距离。因此,矩阵A 中的每一行将与另一个矩阵B 中的所有行进行比较,从而得到一个大小为NxN 和C[i,j] 的最终矩阵C[i,j] 对应于chi-square 之间的距离A[i] 和 B[j] 直方图。
这是我完成这项工作的python代码:
def chi_square(histA,histB):
esp = 1.e-10
d = sum((histA-histB)**2/(histA+histB+eps))
return 0.5*d
def matrix_cost(A,B):
a,_ = A.shape
b,_ = B.shape
C = zeros((a,b))
for i in xrange(a):
for j in xrange(b):
C[i,j] = chi_square(A[i],B[j])
return C
目前,对于100x70 矩阵,整个过程需要 0.1 秒。
有什么办法可以提高这种性能吗?
如果有任何想法或建议,我将不胜感激。
谢谢。
【问题讨论】:
标签: python algorithm optimization numpy matrix