矢量乘法与BLAS'catlas_saxpby无法正常工作

时间:2011-07-05 04:11:35

标签: c ios blas

我正在尝试使用两个任意长度的向量(典型长度为2048)并逐个元素地进行乘法运算。所有n的Z [n] = X [n] * Y [n]。

我设置的测试代码非常基础:

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 个答案:

答案 0 :(得分:3)

正如 Adam Rosenfield 所说,文档不正确。请提交错误。

除此之外,他的答案还有一些更正。首先,saxpby计算alpha * X + beta * Y。第二,对你更有用:BLAS中没有任何功能能够满足您的需求,但vDSP中确实存在这样的功能,它也是Accelerate.framework的一部分:vDSP_vmul

答案 1 :(得分:2)

Apple文档有误。 saxpby函数为标量alpha*X + beta*Yalpha以及向量betaX计算表达式Y

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