我正在尝试使用两个任意长度的向量(典型长度为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.
答案 0 :(得分:3)
正如 Adam Rosenfield 所说,文档不正确。请提交错误。
除此之外,他的答案还有一些更正。首先,saxpby
计算alpha * X + beta * Y
。第二,对你更有用:BLAS中没有任何功能能够满足您的需求,但vDSP中确实存在这样的功能,它也是Accelerate.framework的一部分:vDSP_vmul。
答案 1 :(得分:2)
Apple文档有误。 saxpby
函数为标量alpha*X + beta*Y
和alpha
以及向量beta
和X
计算表达式Y
。
我认为没有可用于计算两个向量的元素乘积的函数,因为这不是线性代数中的常见操作。您可以采用外部产品的对角线,但由于它计算整个外部产品(N 2 乘法而不是N),这是一种非常浪费的努力。