【问题标题】:Kronecker tensor product in javascriptjavascript中的克罗内克张量积
【发布时间】:2017-05-06 18:19:34
【问题描述】:

我需要计算两个矩阵的 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]

【问题讨论】:

    标签: javascript matlab


    【解决方案1】:

    我不知道主题,我必须阅读它。所以我不完全确定代码是否正确(对于每个输入),尽管我检查了一些我在网上找到的示例。

    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>

    【讨论】:

    • 感谢您的帮助!
    猜你喜欢
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 2016-12-14
    • 2011-06-23
    • 2022-09-23
    • 1970-01-01
    相关资源
    最近更新 更多