记
风物长宜放眼量
posts - 20, comments - 8, trackbacks - 0, articles - 5
C++博客
首页
新随笔
联系
管理
聚合
如何一遍计算相关系数
一般在计算相关系数时都要遍历4次数据,这在数据比较多,需要读写文件时,显然是费时的。这里给出Single Pass版本的计算方法,但是其中的变化依据还没有搞懂,希望各位指教:
伪代码:
1
sum_sq_x
=
0
2
sum_sq_y
=
0
3
sum_coproduct
=
0
4
mean_x
=
x[
1
]
5
mean_y
=
y[
1
]
6
for
i
in
2
to N:
7
sweep
=
(i
-
1.0
)
/
i
8
delta_x
=
x[i]
-
mean_x
9
delta_y
=
y[i]
-
mean_y
10
sum_sq_x
+=
delta_x
*
delta_x
*
sweep
11
sum_sq_y
+=
delta_y
*
delta_y
*
sweep
12
sum_coproduct
+=
delta_x
*
delta_y
*
sweep
13
mean_x
+=
delta_x
/
i
14
mean_y
+=
delta_y
/
i
15
pop_sd_x
=
sqrt( sum_sq_x
/
N )
16
pop_sd_y
=
sqrt( sum_sq_y
/
N )
17
cov_x_y
=
sum_coproduct
/
N
18
correlation
=
cov_x_y
/
(pop_sd_x
*
pop_sd_y)
19
下面是我用C改写的,这份改写同时放在了Wiki上面:
1
#include
"
stdlib.h
"
2
#include
"
math.h
"
3
void
SinglePassCorrelation(FILE
*
file,
int
N)
4
{
5
double
*
x
=
new
double
[N
+
1
];
6
double
*
y
=
new
double
[N
+
1
];
7
int
i;
8
for
(i
=
1
;i
<=
N;i
++
)
9
{
10
fscanf(file,
"
%lf %lf
"
,
&
x[i],
&
y[i]);
11
printf(
"
%10.6f %10.6f\n
"
,x[i],y[i]);
12
}
13
double
sum_sq_x
=
0
;
14
double
sum_sq_y
=
0
;
15
double
sum_coproduct
=
0
;
16
double
mean_x
=
x[
1
];
17
double
mean_y
=
y[
1
];
18
double
sweep
=
0
;
19
double
delta_x;
20
double
delta_y;
21
double
pop_sd_x;
22
double
pop_sd_y;
23
double
cov_x_y;
24
double
correlation;
25
for
(i
=
2
;i
<=
N;i
++
)
26
{
27
sweep
=
(i
-
1.0
)
/
i;
28
delta_x
=
x[i]
-
mean_x;
29
delta_y
=
y[i]
-
mean_y;
30
sum_sq_x
+=
delta_x
*
delta_y
*
sweep;
31
sum_sq_y
+=
delta_y
*
delta_y
*
sweep;
32
sum_coproduct
+=
delta_x
*
delta_y
*
sweep;
33
mean_x
+=
delta_x
/
i;
34
mean_y
+=
delta_y
/
i;
35
}
//
end for i
36
pop_sd_x
=
sqrt(sum_sq_x
/
N);
37
pop_sd_y
=
sqrt(sum_sq_y
/
N);
38
cov_x_y
=
sum_coproduct
/
N;
39
correlation
=
cov_x_y
/
(pop_sd_x
*
pop_sd_y);
40
}
41
Posted on 2008-11-28 20:13
邹敏
阅读(2093)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
2011年8月 (1)
2010年9月 (6)
2010年5月 (1)
2010年4月 (2)
2010年2月 (5)
2010年1月 (1)
2008年12月 (1)
2008年11月 (2)
2008年10月 (1)
文章档案
2011年5月 (1)
2011年4月 (1)
2010年7月 (1)
2010年4月 (1)
2008年11月 (1)
面试题
有环链表面试题
如题
搜索
最新评论
1. re: Merge Sort[未登录]
多谢!
--david
2. re: 高斯混合模型 C++实现
评论内容较长,点击标题查看
--laolu
3. re: 终于体会到当年徐老师批评我时的心境了
解脱吧少年
--徐老师
4. re: 高斯混合模型 C++实现
代码写的不错
--小肖
5. re: 终于体会到当年徐老师批评我时的心境了
我相信徐老师能明白你的
--烟皑
阅读排行榜
1. C\C++ byte或者char数组转int值(6508)
2. malloc 分配内存失败的原因之一(4971)
3. Java Login/Logout Demo(1449)
4. C++ Read File function(837)
5. Maya PolyGon 工具(803)
评论排行榜
1. 终于体会到当年徐老师批评我时的心境了(2)
2. case 语句中变量声明与初始化(2)
3. Merge Sort(1)
4. malloc 分配内存失败的原因之一(1)
5. Windows下如何在大文件中寻址(0)