繁体   English   中英

将一个数组的每个元素乘以另一个数组的部分的方法?

[英]Way to multiply each element of one array to PARTS of another?

我是编程新手,并试图找出如何乘法

[1,1,0]

[4,9,7,2,1,6]

对于下一个结果输出

[4,9,7,2,0,0]

如您所见,我想通过将 [1,1,0] 数组的每个值乘以第二个数组的每两个值

[1..] * [4,9..] = [4,9]
[.1.] * [.7,2.] = [7,2]
[..0] * [..1,6] = [0,0]

作为 js 中的示例,我写了类似的东西

var firstArray = [1,1,0];
var secondArray = [4,9,7,2,1,6];
var shift = secondArray / firstArray;
var startpos = 0;
var outArray = [];

for(i=0; i< firstArray.length; i++){
    for(z=i; z< shift+i; z++){
        outArray.push(firstArray[i] * secondArray[z]);
    }
}

console.log(outArray);

它可能在python中

您可以滥用zip和列表切片:

a = [1, 1, 0]
b = [4, 9, 7, 2, 1, 6]

shift = len(b) // len(a)  # use / in Python 2
li = []
for num_a, num_b1, num_b2 in zip(a, b[::shift], b[1::shift]):
    li.extend([num_a * num_b1, num_a * num_b2])

print(li)
# [4, 9, 7, 2, 0, 0]

在 Javascript 中,您可以使用更实用的方法

  • Array#reduce用于迭代因子并返回一个新数组,

  • Array#concat用于在与结果集相乘后添加部分结果,

  • Array#slice ,用于仅获取 values 数组的两个元素,

  • Array#map用于将零件数组与给定因子相乘,

  • 至少使用一个数组作为reduce起始值。

 var factors = [1, 1, 0], values = [4, 9, 7, 2, 1, 6], result = factors.reduce( (r, f, i) => r.concat( values .slice(i * 2, (i + 1) * 2) .map(v => f * v) ), [] ); console.log(result);

您可以通过将输入设为二维数组来将其表示为标准矩阵乘法。

我从这里得到了乘法算法: https : //stackoverflow.com/a/27205510/5710637

计算现在看起来像:

[1,0,0]   [4,9]   [4,9]
[0,1,0] * [7,2] = [7,2]
[0,0,0]   [1,6]   [0,0]

 function multiplyMatrices(m1, m2) { var result = []; for (var i = 0; i < m1.length; i++) { result[i] = []; for (var j = 0; j < m2[0].length; j++) { var sum = 0; for (var k = 0; k < m1[0].length; k++) { sum += m1[i][k] * m2[k][j]; } result[i][j] = sum; } } return result; } var in1 = [[1, 0, 0], [0, 1, 0], [0, 0, 0]]; var in2 = [[4, 9], [7, 2], [1, 6]] console.log(multiplyMatrices(in1, in2))

你可以这样做:

  1. 迭代第一个数组,以便得到一个要相乘的数字。

  2. 然后从目标数组中提取两个元素并相乘,将结果存储在 res 数组中。

 var mul = [1,1,0]; var target = [4,9,7,2,1,6]; var start = 0; var res = []; mul.forEach(function(v,i) { var arr = target.slice(start, start+2);//from start index extract two //elements arr.forEach(function(val,i) { res.push(v * val); }); start += 2; }); console.log(res);

您可以在 array2 上使用map()并使用一个 var 为每两个元素增加 array1 的索引,然后将 array1 的当前元素与 array2 中具有该 var 索引的元素相乘。

 var a1 = [1,1,0]; var a2 = [4,9,7,2,1,6]; var j = 0; var result = a2.map(function(e, i) { if(i % 2 == 0 && i != 0) j++ return e * a1[j]; }) console.log(result)

python您可以使用以下代码。 我假设第二个数组的长度更大,并且可以被较短数组的长度整除

def multiply(a, b):
    x, y = len(a), len(b)                        # Find lengths
    assert x % y == 0                            
    n = x / y
    result = [a[i] * b[i / n] for i in range(x)] # For each index in a, calculate the appropriate element in output by multiplying with relevant part
    print result

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM