我需要计算两个矩阵的Kronecker乘积(例如MatLab中的kron()函数)。我似乎无法在上面找到任何代码,也许有人可以将其放在自己的计算机上,可以使用了吗?我已经搜索过GitHub,但它们似乎都无法正常工作。
https://en.wikipedia.org/wiki/Kronecker_product
因此,例如:A = [1, 2];B = [3, 4];C =kroneckerProduct(A,B)
C然后会给出[3,4,6,8]
最佳答案
我不知道这个话题,我不得不阅读它。所以我不确定代码是否正确(对于每个输入),尽管我检查了网上找到的一些示例。
function mapAB(a,b,fn){
var k=0, out = Array(a.length*b.length);
for(var i=0; i<a.length; ++i)
for(var j=0; j<b.length; ++j)
out[k++] = fn(a[i], b[j]);
return out;
}
function kroneckerProduct(a,b){
return Array.isArray(a)?
Array.isArray(b)?
mapAB(a,b, kroneckerProduct):
a.map(v => kroneckerProduct(v, b)):
Array.isArray(b)?
b.map(v => kroneckerProduct(a, v)):
a*b;
}
function mapAB(a, b, fn) {
var k = 0,
out = Array(a.length * b.length);
for (var i = 0; i < a.length; ++i)
for (var j = 0; j < b.length; ++j)
out[k++] = fn(a[i], b[j]);
return out;
}
function kroneckerProduct(a, b) {
return Array.isArray(a) ?
Array.isArray(b) ?
mapAB(a, b, kroneckerProduct) :
a.map(v => kroneckerProduct(v, b)) :
Array.isArray(b) ?
b.map(v => kroneckerProduct(a, v)) :
a * b;
}
function compute() {
var a = document.getElementById("a").value;
var b = document.getElementById("b").value;
var text;
try {
text = JSON.stringify(kroneckerProduct(
JSON.parse(a.trim()),
JSON.parse(b.trim())
), null, 2);
} catch (err) {
text = err;
}
document.getElementById("out").innerHTML = text;
}
<input id=a value=[1,2]><br>
<input id=b value=[3,4]><br>
<input type=button value=compute onclick=compute()>
<div id=out></div>
关于javascript - JavaScript中的Kronecker张量产品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43823896/