Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
This community is designed for sharing of public information. Please do not share Intel or third-party confidential information here.



Hi all,

I have a lot of trouble understanding how the correlation/convolution functions are used.

I have looked at the Information from the Manual but the description - involving finite functions - is far too abstract (and I've been used to abstractness as a physicist).

Can someone help me carry out a simple correlation analysis on two trivial vectors, say

v1 =(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

v2 = (1.01, 1.99, 3.01, 3.99, 5.01, 5.99, 7.01, 7.99, 9.01, 9.99)

(which should be approximatively 1) just to get me going?

Concretely: what should be my input, what will my output look like (and, ideally, why...)?

Here's what I have :

#define XSHAPE 10

#define YSHAPE 10

#define ZSHAPE (XSHAPE-1)+(YSHAPE-1)+1

int test6()


VSLCorrTaskPtr task; // declare the task

MKL_INT mode, xshape, yshape, zshape; //declare some variables

static double x[XSHAPE], y[YSHAPE], z[ZSHAPE]; //declare the input and output arrays

MKL_INT xstride = 1, ystride = 1, zstride = 1; //declare the "increment"

int status, ok, i;

xshape = XSHAPE; //length of vector

yshape = YSHAPE;

zshape = ZSHAPE;

for (i = 0; i<xshape; i++) // initialize the input vectors.

x = i+1;

for (i = 0; i<yshape; i++)

y = i+1 + 0.01*pow(-1,i);

ok = 1; // a priori success.

printf("EXAMPLE executing a correlation task\n");

mode = VSL_CORR_MODE_AUTO; //set mode

vsldCorrNewTask1D(&task, mode, xshape, yshape, zshape); //create task with, as an argument: reference to task object, mode, vectors lengths.

status = vsldCorrExec1D(task, x, xstride, y, ystride, z, zstride); // initialize status with task, vectors and respective increments. Execute task, fill vector z.

if (status != VSL_STATUS_OK) { // problem with the initialization of the status. // conversion from "status type" to int?

printf("ERROR: bad status: %d\n", status);

ok = 0; // boolean of success



for (i = 0; i < yshape; i++)


std::cout << y << std::endl;


printf("EXAMPLE %s\n", ok ? "PASSED" : "FAILED");

return !ok;}


Thanks in advance!



0 Kudos
3 Replies

Please check out this code example in your MKL installation: $MKLROOT/examples/vslc/source/vsldcorr_1d_auto.c

It does exactly what you want to do. You can reuse the code and simply plug in your own X and Y arrays.





Hi Zhang,

I already did. It's not so much that the code doesn't work, but more that I don't understand what it does.

I expect(ed) Pearson's product-moment coefficient (see,

i.e. an application (R^n) x (R^n)->R, where R represents the set of real numbers.

So, here are my two questions:

1) Is there a function to compute this Pearson coefficient in the MKL?
2) If not, can you tell me what the Output of vsldcorr_1d_Auto.c is?

Thanks in advance.



Hi Jerome, To calculate the Pearson coefficient please use Summary Statistics component of Intel MKL. Its API is described at Summary Statistics Application Notes available at provide additional details on APIs/usage models/algorithms. I assume the section contains the info on computation of correlation. You might want to have a quick look at the example vsldcorrelationmatrix.c available at MKLROOT/examples/vslc/source of the MKL installation folder which shows how to calculate the correlation and covariance matrices. Also, please have a look at the training materials describing stat component of MKL at, slides 17-19 have the quick high level introduction into Summary Stats. Please let us know if you need further help. Andrey