- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi! I would like to ask if there are routines for the following issues:

1) Extract a row/column of a matrix.

2) If theta is a vector extract a subvector. For example extract the elements 4 until 8 of theta.

3) Merge 2 vectors. For example if a, b be row vectors I want to create a new vector c with the first row be the a vector and the second row will be the b vector.

I know that the above can be done using "for", but I' m interested in using routines (if there are).

Thank you in advance.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi Anas,

Sorry, it seems i may mistake your quesiton as the one http://software.intel.com/en-us/forums/topic/506612.

But the basic idea is same

As the function provided by MKL are mainly based on some kind of standard interface, like BLAS ( matrix, vector operation). It may not flexiable like Matlab and R. But it can accept C array and these operations you mentioned are embeded in the computation.

for example, in your case,

// Note: A can be accessed by pointer with regular pattern by incx, tranpose.etc.

#include <stdio.h>

#include <stdlib.h>

#include <mkl.h>

int main ()

{

double a[2][2] = {{1, 2}, {3, 4}};

double b[2] = {11, 12};

double res;

res =cblas_ddot(2, &a[0][0] , **2**, b, 1); // Compute a vector-vector dot product of the first column of the matrix and the vector b. The first column is the vector{1,3}

printf(" %0.2f\n", res);

//Compute a vector-vector dot product of the first column of the matrix and the vector b. The second column is the vector{2,4}

res =cblas_ddot(2, &a[0][1] , 2, b, 1);

printf(" %0.2f\n", res);

cblas_dgemv(CblasRowMajor, CblasTrans, 2, 2, 1.0, &a[0][0], 2, b, 1, 0.0, y, 1);

printf(" %0.2f\n", y[0], y[1]);

cblas_dgemv(CblasColMajor, CblasNoTrans, 2, 2, 1.0, &a[0][0], 2, b, 1, 0.0, y, 1);

printf(" %0.2f\n", y[0], y[1]);

return 0;

}

Best Regrads,

Ying

return 0;

}

Link Copied

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi Anas,

It seems Array Notation be a suitable tool for these operations. Please See http://software.intel.com/en-us/articles/about-intel-cilk-plus-and-how-to-get-started.

A[:] - refers the entire array

A[10:5] - refers A[10], A[11], A[12], A[13], A[14]

A[1:4:2] - refers A[1], A[3], A[5], A[7]

multiple dimensions: A[<lower bound>:<length>:<stride>][<lower bound>:<length>:<stride>]

A[:][:]- refers the entire 2 dimensional array

You can write code like ColumN= A

It support C /Fortran lanaguage. and if you are using Intel C/Fortran Composer XE.

Best Regards,

Ying

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Thank you for your help. I tried to use the array notation with the function ddot but it doesn' t work. Could you tell me please what is wrong?

int main ()

{

double a[2][2] = {{1, 2}, {3, 4}};

double b[2] = {11, 12};

double res;

res =cblas_ddot(2, a[:][1] , 1, b, 1); // Compute a vector-vector dot product of the first column of the matrix and the vector b. The first column is the vector{1,3}

printf(" %0.2f\n", res);

return 0;

}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

MKL has functions that allow you to extract/copy elements of a vector, indexed using different methods (increments, masks, or index arrays). Check out the "VML Pack/Unpack Functions" (http://software.intel.com/en-us/node/470564).

For matrices, please note that matrices passed to MKL computation routines are stored as 1-dimensional arrays in memory.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi Anas,

Sorry, it seems i may mistake your quesiton as the one http://software.intel.com/en-us/forums/topic/506612.

But the basic idea is same

As the function provided by MKL are mainly based on some kind of standard interface, like BLAS ( matrix, vector operation). It may not flexiable like Matlab and R. But it can accept C array and these operations you mentioned are embeded in the computation.

for example, in your case,

// Note: A can be accessed by pointer with regular pattern by incx, tranpose.etc.

#include <stdio.h>

#include <stdlib.h>

#include <mkl.h>

int main ()

{

double a[2][2] = {{1, 2}, {3, 4}};

double b[2] = {11, 12};

double res;

res =cblas_ddot(2, &a[0][0] , **2**, b, 1); // Compute a vector-vector dot product of the first column of the matrix and the vector b. The first column is the vector{1,3}

printf(" %0.2f\n", res);

//Compute a vector-vector dot product of the first column of the matrix and the vector b. The second column is the vector{2,4}

res =cblas_ddot(2, &a[0][1] , 2, b, 1);

printf(" %0.2f\n", res);

cblas_dgemv(CblasRowMajor, CblasTrans, 2, 2, 1.0, &a[0][0], 2, b, 1, 0.0, y, 1);

printf(" %0.2f\n", y[0], y[1]);

cblas_dgemv(CblasColMajor, CblasNoTrans, 2, 2, 1.0, &a[0][0], 2, b, 1, 0.0, y, 1);

printf(" %0.2f\n", y[0], y[1]);

return 0;

}

Best Regrads,

Ying

return 0;

}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi Ying! I appreciate your help, thank you very much.

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page