2011-07-05 50 views
1

我想要有两个任意长度的向量(典型长度将是2048)并且乘以元素。所以对于所有n,Z [n] = X [n] * Y [n]。向量乘BLAS'catlas_saxpby不能正常工作

我所建立的测试代码是相当简单:

float inputX[4] = { 2, 4, 8, 16 }; 
float inputY[4] = { 2, 4, 8, 16 }; 

catlas_saxpby(4, 1, inputX, 1, 1, inputY, 1); 

结果进入inputY,其结果是

4.000000, 8.000000, 16.000000, 32.000000 

其中,如果他们被乘以它应该是4,16 ,64,256。但它看起来像添加。

所以这不是我所期望的,文档没有给我足够的信息来确定它在做什么。

任何想法?

Apple's documentation for BLAS says this: 

Computes the product of two vectors, scaling each one separately (single-precision). 

void catlas_saxpby (
    const int N, 
    const float alpha, 
    const float *X, 
    const int incX, 
    const float beta, 
    float *Y, 
    const int incY 
); 
Parameters 
N 
Number of elements in the vector. 
alpha 
Scaling factor for X. 
X 
Input vector X. 
incX 
Stride within X. For example, if incX is 7, every 7th element is used. 
beta 
Scaling factor for Y. 
Y 
Input vector Y. 
incY 
Stride within Y. For example, if incY is 7, every 7th element is used. 
Discussion 
On return, the contents of vector Y are replaced with the result. 

回答

2

Apple文档有误。 saxpby函数计算标量为alphabeta的表达式alpha*X + beta*Y和矢量XY

我不认为有一个函数可用于计算两个向量的元素明智的乘积,因为这不是线性代数中的常见操作。您可以采用外部产品的对角线,但由于它计算整个外部产品(而不是N),所以这是一种严重的工作量浪费。

+0

我想我会卡住使用霓虹灯内部函数或for循环。我可能会尝试两种方法,看看更快。 –

3

As Adam Rosenfield表示,文档不正确。请提交一个错误。

除此之外,他的答案还有一些更正。首先,saxpby计算alpha * X + beta * Y。其次,对你更有用:在BLAS中没有你想做的功能,但在vDSP中也有这样的功能,它也是Accelerate.framework的一部分:vDSP_vmul

+0

成功使用一些霓虹内在函数后,我想我现在必须使用vmul:P。谢谢你给我看。它当然更便携。 –