javascript - JavaScript 中浮点常量的高效编码

标签 javascript math.js

我正在用 JavaScript 编写信号处理演示。为此,我需要存储相对较大的浮点向量。如果我以一种天真的方式来做(使用 mathjs library ):

var vector = math.matrix([-35.545806884765625, -3.1195175647735596,  ...]);

它工作正常,但源很容易有兆字节。

有没有办法表示 float ,例如,在 base64 编码中,以便压缩源代码?

最佳答案

一种选择是使用类型化数组并以十六进制(每个字节两位数字)序列化底层字节缓冲区。不像 base64 那样节省空间,但简单且没有所有 unicode 麻烦。

let data = new Float32Array([
    -35.545806884765625,
    -3.1195175647735596
    ]

);

console.log(data)

// encode

let encoded = '';

for (let x of new Uint8Array(data.buffer))
    encoded  += (x | 0x100).toString(16).slice(1);

console.log(encoded)

// decode

let bytes = new Uint8Array(
    encoded
        .match(/../g)
        .map(x => parseInt(x, 16)));

let decodedData = new Float32Array(bytes.buffer)

console.log(decodedData);

如果您仍然需要 base64,MDN 提供了一些如何以正确的方式做到这一点的建议:https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding

关于javascript - JavaScript 中浮点常量的高效编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55533020/

相关文章:

javascript - JavaScript 中的简单回归预测算法

node.js - NodeJS - 作为字符串循环遍历范围

javascript - 更改 ramda.js 中对象列表中的 prop

javascript - FabricJS v. 2 beta – 启用禁用过滤器

javascript - React JS 无法读取未定义的属性 'location'

javascript - 为什么 math.bignumber() 返回一个对象?我该如何使用它?

javascript - 1行高CodeMirror实例

javascript - 是否可以使用 Array.prototype.reduce 创建数组的线性随机选择?

javascript - 在没有 math.js 的 Javascript 中使用虚数