2017-05-04 178 views
2

我在编程的新手,试图找出如何乘将一个数组中的每个元素与另一个数组的每个元素相乘的方式?

[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); 

这可能是蟒蛇

+0

您正在寻找仅在python中的解决方案或JavaScript中的解决方案? –

回答

0

在Javascript中,您可以通过使用

  • Array#reduce用于重复使用功能更强大的方法的因素,并返回一个新的阵列,

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

  • Array#slice,用于获取只有两个值阵列的元件,

  • 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);

+0

非常感谢你 – Max

1

可以滥用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] 
+0

这个例子中使用了什么'shift'? – Richy

+0

@Richy作为切片“跳过”的参数,我编辑了答案 – DeepSpace

+0

谢谢你们!你真棒 – Max

0

您可以表达这种通过使您输入二维数组标准的矩阵乘法。

我从这里乘算法: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))

+0

谢谢你的帮助 – Max

0

你可以这样做:

  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);

+0

谢谢你真的有帮助 – Max

0

可以在数组2使用map(),并使用一个无功用于递增ARRAY1的指数对于每两个元素,然后乘以ARRAY1的当前元素与来自数组2具有索引元件那个变种

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)

+0

谢谢你! – Max

+0

不客气。 –

0

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 
相关问题