首页 > 解决方案 > 如何使用math.js从javascript中的变量创建矩阵

问题描述

假设我有一个变量 Y 的向量,看起来像这样:

VarY = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

我想用 math.js 把它转换成这样的 Vector

VarY: [[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]

这很容易通过使用硬编码来完成math.matrix([[1],[2],...,[0]])

但由于这个向量是可变的,我正在寻找一种让它动态的方法......

我在想这样的事情:

math.matrix(VarY);

但它不允许这样的变量。

编辑 - -

这里的额外细节:

我正在接收一些数据作为输入,这就是您将在此处看到的“XOriginal”

for(var i=0; i<26; i++){
VarY.push([XOriginal[i].splice(26,1)]); // @@@@ HERE I SAVE A COPY FOR ALL THE Y RESULTS OF THE ORIGINAL DATA
XOriginal[i].splice(26,1);
}

for ( i=0; i<26; i++) {
  VarY.push([0]);
}

最后,当我使用 console.log 时,我的变量 VarY,如下所示:

console.log('VarYReal: ' + VarY);

在我的控制台中,它看起来像这样:

VarYReal: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

现在,由于这个变量没有将它存储为数组或矩阵,这就是我不能使用 math.multiply 的原因

标签: javascriptmath.js

解决方案


math.js有一个reshape()功能。从原始 js 数组创建矩阵后,您可以使用它更改为您想要的矩阵:

const math = require('mathjs')
let y = [0, 1, 2,  3, 4]
let m = math.matrix(y)  

console.log(m.size())     // [ 5 ]

math.reshape(m, [m.size()[0], 1])

console.log(m.size())     // [ 5, 1 ]
console.log(m.valueOf())  // [ [ 0 ], [ 1 ], [ 2 ], [ 3 ], [ 4 ] ]

推荐阅读