rob*_*anf 2 numpy matrix python-3.x
我有一个2d numpy矩阵,想要计算以下测试统计.
我有蛮力代码来做这件事,但似乎应该有一个更通用的numpy解决方案适用于任何2D矩阵,使用类似的东西np.diag().我无法弄明白.
def bruteforce(m):
s = 0.0
for (i,j) in itertools.product(range(0,m.shape[0]),range(0,m.shape[0])):
if i<j:
n = (m[i,j]-m[j,i])**2
d = m[i,j]+m[j,i]
if float(d) != 0.:
s = s+(float(n)/float(d))
else:
return('NA')
return(s)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,m是整数的N×N矩阵.有没有办法在numpy中进行矢量化,避免像这样的暴力循环?
如果m是方阵,这将完成工作:
import numpy as np
np.sum((m-m.T)**2/(m+m.T))/2
Run Code Online (Sandbox Code Playgroud)
这是一个函数,它涵盖了分母中有0的情况:
def find_s(m):
d=(m+m.T)
off_diag_indices=np.triu_indices(len(d),1)
if 0 in d[off_diag_indices]:
return 'NA'
else:
numerator=(m-m.T)**2
denominator=m+m.T
return np.sum(numerator[off_diag_indices]/denominator[off_diag_indices])
Run Code Online (Sandbox Code Playgroud)
我使用的原因off_diag_indices是因为我们实际上允许在对角线上有0 m+m.T,因为我们从不在对角线上求和元素.
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |