如何使用 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 ] ]
假设我有一个变量 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 ] ]