矩阵和向量上的点积
本文关键字:向量 | 更新日期: 2023-09-27 17:50:27
我试图得到两个矩阵或向量的点积。我正在使用Accord.net框架,但我似乎无法在文档中找到任何显示如何做到这一点的内容。
下面是一个例子:
double[] vector1 = { 1, 2, 3 };
double[] vector2 = { 3, 4, 5 };
现在我需要像这样把它们相乘:
(1 * 3) + (2 * 4) + (3 * 5)
我认为这是可能的,我只是找不到显示用于此的方法的文档
下面的代码不应该工作吗?
vector1.InnerProduct(vector2);
文档url: http://accord-framework.net/docs/html/M_Accord_Math_Matrix_InnerProduct.htm
答案如下。
double[] vector1 = { 1, 2, 3 };
double[] vector2 = { 3, 4, 5 };
double result = Matrix.Dot(vector1, vector2);
你可以这样使用LINQ的Zip()
函数:
using System.Linq;
double[] vector1 = { 1, 2, 3 };
double[] vector2 = { 3, 4, 5 };
IEnumerable<double> dotProducts = vector1.Zip(vector2, (a, b) => a * b);
Zip()
操作位于同一位置(或索引)的两个成员。委托传递给Zip()的函数用于从两个序列中相同索引处的成员生成压缩后的单个值。
对结果进行迭代将得到以下结果:
foreach (double dp in dotProducts)
{
Console.WriteLine(dp);
}
/* Output:
* 3
* 8
* 15
*/
与其将值存储在数组中,不如将它们存储在Vector中,如:
Vector v1 = new Vector(1, 2, 3);
Vector v2 = new Vector(3, 4, 5);
Double crossProduct = Vector.CrossProduct(vector1, vector2);