我是编程新手,并试图找出如何乘法
[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中
答案 0 :(得分: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]
答案 1 :(得分: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);
答案 2 :(得分:0)
您可以通过输入2D数组来将其表示为标准矩阵乘法。
我从这里得到了乘法算法: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))
&#13;
答案 3 :(得分:0)
你可以这样做:
迭代第一个数组,以便得到一个乘以的数字。
然后从目标数组中提取两个元素并相乘,将结果存储在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);
答案 4 :(得分:0)
你可以在array2上使用map()
并使用一个var来为每两个元素递增array1的索引,然后将array1的当前元素与array2中的元素相乘,其中index具有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)
答案 5 :(得分: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