c – BLAS中的元素向量向量乘法?

前端之家收集整理的这篇文章主要介绍了c – BLAS中的元素向量向量乘法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法用BLAS,GSL或任何其他高性能库进行元素向量向量乘法?

解决方法

(以字面上的题目标题…)

是的,可以单独使用BLAS(尽管它可能不是最有效的方式).

诀窍在于将一个输入向量作为对角线矩阵:

⎡a    ⎤ ⎡x⎤    ⎡ax⎤
⎢  b  ⎥ ⎢y⎥ =  ⎢by⎥
⎣    c⎦ ⎣z⎦    ⎣cz⎦

然后,您可以使用矩阵向量乘法函数中的一个,该函数可以将对角矩阵作为输入,而不需要填充,例如. SBMV

例:

void ebeMultiply(const int n,const double *a,const double *x,double *y)
{
    extern void dsbmv_(const char *uplo,const int *n,const int *k,const double *alpha,const int *lda,const int *incx,const double *beta,double *y,const int *incy);

    static const int k = 0; // Just the diagonal; 0 super-diagonal bands
    static const double alpha = 1.0;
    static const int lda = 1;
    static const int incx = 1;
    static const double beta = 0.0;
    static const int incy = 1;

    dsbmv_("L",&n,&k,&alpha,a,&lda,x,&incx,&beta,y,&incy);
}

// Test
#define N 3
static const double a[N] = {1,3,5};
static const double b[N] = {1,10,100};
static double c[N];

int main(int argc,char **argv)
{
    ebeMultiply(N,b,c);
    printf("Result: [%f %f %f]\n",c[0],c[1],c[2]);
    return 0;
}

结果:[1.000000 30.000000 500.000000]

猜你在找的C&C++相关文章