我想要一个数学公式来找到两个数组项的乘积,但不需要逐个单独相乘



我有两个具有相同长度的数组

a=[1,2,3,4]
b=[5,6,7,8]

我想在两个阵列之间找到产品。

我的确切问题是:有没有任何方法可以在不使用的情况下找到产品

(a[0]*b[0] + a[1]*b[1]+ a[2]*b[2]+ a[3]*b[3] )

示例:

a=[1,2,3,4] b=[5,6,7,8] a=[1,2,3,4] => sum of a =>10 b=[5,6,7,8] => sum of b=> 26 a+b = 10+26 => 36.

在这里,我们可以在不这样做的情况下求和(a[0]+b[0]+a[1]+b[1]+a[2]+b[2]+a[3]+b[3](

像这样,我想得到两个阵列之间的产品

这样的东西应该可以工作:

function multiplyArrays(firstArray, secondArray){
if (firstArray.length !== secondArray.length)
return;
let total = 0;
for (let i = 0; i < firstArray.length; i++)
total += firstArray[i] * secondArray[i];
return total;
}

没有乘法就无法进行乘法运算。您可以将*符号隐藏在某些库下,例如Lodash。

以下是两种解决方案。和无*征的lodash。

现场演示:

const arr1 = [1,2,3];
const arr2 = [4,5,6];
const sumProductJS =  arr1.reduce((r,v,i) => r+v*arr2[i], 0);
const sumProductLodash = _.zipWith(arr1, arr2, _.multiply).reduce(_.add);
console.log('Vanila:', sumProductJS);
console.log('Lodash:', sumProductLodash);
.as-console-wrapper { max-height: 100% !important; top: 0 }
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

有没有办法在不乘以两个向量的分量值的情况下找到它们的乘积

答案:


论坛

  1. 计算同一向量空间中两个向量的标量乘积的第一个公式将其向量分量的乘积相加:

    a.b=∑aibi。。。对于i=1到n

    这是帖子中作为基线给出的公式。JavaScript实现示例:

    const dotProduct = (v1, v2) => {
    let sigma;
    if( v1.length == v2.length) {
    sigma = v1.reduce( (sigma, Vi, i) => sigma += Vi * v2[i], 0);
    }
    return sigma;
    }
    
  2. 标量乘积的第二个公式是

    a.b=║一║ ║b║cosθ

    意思是取第一个向量的长度、第二个向量的宽度和它们之间夹角的余弦的乘积。

    • 向量的长度是其分量的平方和的平方根(n维中的Pythagorous(。因此,每次长度计算都涉及对向量分量的平方求和:向量与自身的点积,然后取平方根。

    • 两个矢量之间角度的余弦公式使用了两个公式的等价性:

      cos(θ(=a.b/(║一║ ║b║)

      要求首先计算点积。

    因此,计算第二个公式值与直接使用第一个公式相比没有优势,并且由于为获得平方根值而采取的额外步骤,可能会导致计算不准确。

另见";寻找更高维度的向量长度";以及";两个矢量之间的角度的余弦";;


_如果问题是由于矩阵乘法遇到的问题而出现的;"计算机大矩阵乘法";。虽然不熟悉这个领域,但这个话题肯定已经被调查过了。

相关内容

最新更新