javascript - 如何在 JavaScript TypedArray 中存储和检索二进制矩阵?
问题描述
假设我有一个大小为 m × n 的二进制矩阵。每行有 n 位长。我想尽可能有效地存储这个矩阵,同时仍然能够快速检索各个行。特别是我希望能够在检索行后对它们进行按位运算。为此,我使用了 JavaScript TypedArray。
我对解决方案的尝试如下:
- 初始化矩阵,使其具有可被 8 整除的列数(例如,通过填充)
- 逐行展平矩阵(即并排放置行)
- 将每 8 位转换为 8 位整数,返回 8 位整数的平面数组
- 初始化缓冲区并将 8 位整数数组存储为 u8int TypedArray
要检索特定行i:
- 确定构成单行的 8 位整数的数量(因为我确保列数可以被 8 整除,所以这应该是一个整数)。打电话给这个
rowLength
。 - 查找第i行的偏移索引,其中
rowStartOffset = i*rowLength; rowEndOffset = (i+1)*rowLength-1
并切片数组 - 将数组中的整数转换回二进制格式
- 对更多行重复 0-2,然后对它们进行按位运算
这行得通,但我想知道是否有更好的方法来做到这一点。特别是有没有办法进行按位运算而不必转换回二进制?(目前我通过将整数转换为二进制字符串然后连接来做到这一点)。有没有不使用 TypedArray 的方法?
解决方案
推荐阅读
- spring-boot - 如何通过在 spring-boot 中从 bootstrap.yml 中获取名称来在 log4j2 中记录应用程序名称?
- javascript - 在 Typescript 中正确模拟 fetch
- java - 如何在Android中禁用对话框按钮?
- c - 评估和打印键盘输入作为双重
- android - 如何在 android webview 应用程序中实现应用程序购买?
- c++ - 如何将 unique_ptr 的移动构造函数和运算符实现为类的私有成员
- sql - Docker docker-entrypoint-initdb.d 按定义的顺序执行
- node.js - 如何将 nuxt.js 与 node 和 expressjs 一起使用
- d3.js - D3 lineRadial 不显示,而其他元素显示
- javascript - JQuery在第一次结束时调用动画函数