#include <iostream>
#include <math.h>
using namespace std;
void correlate(int ny, int nx, const float* data, float* result)
{
float* inter = new float[ny*nx];
for (int y = 0; y < ny; ++y)
{
double mean = 0.0;
double sd = 0.0;
double temp;
//Finding the mean
for (int x = 0; x < nx; ++x)
{
mean += data[x + y*nx];
}
mean = mean/nx;
//cout<<mean<<endl;
//Finding the Standard Deviation
for (int x = 0; x < nx; ++x)
{
temp = data[x + y*nx] - mean;
inter[x + y*nx] = temp;
sd += (temp)*(temp);
}
sd= sqrt(sd/(nx-1));
//cout<<nx<<" "<<sd<<endl;
//Finding zero mean and unit variance
for (int x = 0; x < nx; ++x)
{
inter[x + y*nx] = inter[x + y*nx] / sd;
}
}
for (int i = 0; i < ny; i++)
{
for (int j = 0; j < ny; j++)
{
float sum = 0.0;
for (int k = 0; k < nx; k++)
sum = sum + inter[i * nx + k] * inter[j * nx + k];
result[i * ny + j] = sum;
}
}
}
int main() {
float xarr[] = { 0, 2, 4, 6, 8 ,10};
int nx = 3;
int ny = 2;
float *result = new float[ny*ny];
correlate(2,3,xarr,result);
for(int i = 0;i<ny*ny;i++)
cout<< result[i] <<" ";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWF0aC5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2b2lkIGNvcnJlbGF0ZShpbnQgbnksIGludCBueCwgY29uc3QgZmxvYXQqIGRhdGEsIGZsb2F0KiByZXN1bHQpIAp7CglmbG9hdCogaW50ZXIgPSBuZXcgZmxvYXRbbnkqbnhdOwoJZm9yIChpbnQgeSA9IDA7IHkgPCBueTsgKyt5KSAKCXsKCQlkb3VibGUgbWVhbiA9IDAuMDsKCQlkb3VibGUgc2QgPSAwLjA7CgkJZG91YmxlIHRlbXA7CgkJLy9GaW5kaW5nIHRoZSBtZWFuCgkJZm9yIChpbnQgeCA9IDA7IHggPCBueDsgKyt4KSAKCQl7CgkJCW1lYW4gKz0gZGF0YVt4ICsgeSpueF07CgkJfQoJCW1lYW4gPSBtZWFuL254OwoJCS8vY291dDw8bWVhbjw8ZW5kbDsKCQkvL0ZpbmRpbmcgdGhlIFN0YW5kYXJkIERldmlhdGlvbgoJCWZvciAoaW50IHggPSAwOyB4IDwgbng7ICsreCkgCgkJewoJCQl0ZW1wID0gZGF0YVt4ICsgeSpueF0gLSBtZWFuOwoJCQlpbnRlclt4ICsgeSpueF0gPSB0ZW1wOwoJCQlzZCArPSAodGVtcCkqKHRlbXApOwoJCX0KCQlzZD0gc3FydChzZC8obngtMSkpOwoJCS8vY291dDw8bng8PCIgIjw8c2Q8PGVuZGw7CgkJLy9GaW5kaW5nIHplcm8gbWVhbiBhbmQgdW5pdCB2YXJpYW5jZQoJCWZvciAoaW50IHggPSAwOyB4IDwgbng7ICsreCkgCgkJewoJCQlpbnRlclt4ICsgeSpueF0gPSBpbnRlclt4ICsgeSpueF0gLyBzZDsKCQl9CiAgICB9Cglmb3IgKGludCBpID0gMDsgaSA8IG55OyBpKyspIAoJewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnk7IGorKykgCgkJewogICAgICAgICAgICBmbG9hdCBzdW0gPSAwLjA7CiAgICAgICAgICAgCWZvciAoaW50IGsgPSAwOyBrIDwgbng7IGsrKykKICAgICAgICAgICAgICAgIHN1bSA9IHN1bSArIGludGVyW2kgKiBueCArIGtdICogaW50ZXJbaiAqIG54ICsga107CiAgICAgICAgICAgIHJlc3VsdFtpICogbnkgKyBqXSA9IHN1bTsKICAgICAgICB9CiAgICB9CgkKfQoKCmludCBtYWluKCkgewogICAgZmxvYXQgeGFycltdID0geyAwLCAyLCA0LCA2LCA4ICwxMH07CiAgICBpbnQgbnggPSAzOwogICAgaW50IG55ID0gMjsKICAgIGZsb2F0ICpyZXN1bHQgPSBuZXcgZmxvYXRbbnkqbnldOwogICAgY29ycmVsYXRlKDIsMyx4YXJyLHJlc3VsdCk7CiAgICBmb3IoaW50IGkgPSAwO2k8bnkqbnk7aSsrKQogICAgCWNvdXQ8PCByZXN1bHRbaV0gPDwiICI7CglyZXR1cm4gMDsKfQ==