[英]Is there a way to loop for each element that is the same as in another array?
[英]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))
你可以这样做:
迭代第一个数组,以便得到一个要相乘的数字。
然后从目标数组中提取两个元素并相乘,将结果存储在 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.