我试图获得两个矩阵或向量的点积。我正在使用Accord.net框架,但我似乎无法在文档中找到显示如何执行此操作的任何内容。
以下是一个例子:
double[] vector1 = {1,2,3};
double[] vector2 = {3,4,5};
现在我需要将它们相乘:
(1*3) + (2*4) + (3*5)
我认为这是可能的,我只是找不到显示用于此目的的方法的文档。
答案 0 :(得分:3)
以下代码是否有效?
vector1.InnerProduct(vector2);
文档网址:http://accord-framework.net/docs/html/M_Accord_Math_Matrix_InnerProduct.htm
答案 1 :(得分:2)
这是答案。
double[] vector1 = { 1, 2, 3 };
double[] vector2 = { 3, 4, 5 };
double result = Matrix.Dot(vector1, vector2);
答案 2 :(得分:1)
您可以将它们存储在Vector中,而不是将值存储在数组中:
Vector v1 = new Vector(1,2,3);
Vector v2 = new Vector(3,4,5);
Double crossProduct = Vector.CrossProduct(vector1, vector2);
答案 3 :(得分:0)
您可以像这样使用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);
}
//3
//8
//15