如何使用 math.js 从 javascript 中的变量创建矩阵

How to create a matrix using math.js from a variable in 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:(所以后面我可以实际使用其他math.js函数,比如Multiply)

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

的原因

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 ] ]