我有几个巨大的数据矩阵要处理,1000 x 1000 x 400,000。我通常使用Matlab,我的Matlab脚本需要9个小时来处理一个数据集。所以我试着将它放入C.
问题是,当我计算数据的标准差时,C和Matlab不匹配。它们甚至都不是很接近。
for(std=0;std<Ndat;std++)
{
for(j=0;j<MAXPAIR;j++)
{
dist=distance(polymer[GoPair[j].a1],polymer[GoPair[j].a2]);
if(dist<=(GoPair[j].dist+PREFACTOR))
{
Stan[j] += ((1-Prob[j])*(1-Prob[j]));;
}
else if(dist>(GoPair[j].dist+PREFACTOR))
{
Stan[j] += ((0-Prob[j])*(0-Prob[j]));
}
}
}
for(j=0;j<MAXPAIR;j++)
{
stnDev[j] = sqrt(Stan[j]/Ndat);
}
我的想法是Stan[j]
应该在每次循环运行时将(1-Prob[j])^2
或(0-Prob[j])^2
添加到该数组位置中已经存在的内容,但它不会返回Matlab为几乎相同的脚本所做的相同值。
你们有没有看到基本的错误,或者知道为什么这对我不起作用?