首页 > 解决方案 > 将矩阵列实现为类似对象的数组

问题描述

我正在尝试在 Javascript 中实现一个 Matrix 类,使用单个Float64Array来存储元素。这些行再次Float64Array是共享数据的对象ArrayBuffer。到目前为止,这是一个简单的实现:

class Matrix {

  constructor(n = 3, m = 3, i) {
    this.n = n;
    this.m = m:
    let data = new Float64Array(m * n);
    if (i) {
      data.fill(i);
    }
    this.data_ = data;
    let rows = new Array(n);
    for (let j = 0; j < n; j++) {
      rows[i] = new Float64Array(this.data_.buffer, 8 * i * m, m);
    }
    this.rows_ = rows;
  }

  getRow(i) {
    return this.rows_[i];
  }

}

这一切都很好,对一行的所有更改都反映在data,反之亦然。

但我正在努力为这些列找到一个优雅的解决方案。就像一行一样,每一列都应该是一个类似数组的对象,可以用方括号访问并反映底层的变化data。因此,对于第 n 列colN[i]应该获取并将值设置为data[i * colCount + n]

有没有办法以某种方式将 a 映射ArrayBuffer到 a TypedArray,所以TypedArray不简单地访问 a 的一个连续序列ArrayBuffer

还是有另一种方法(也许通过某种方式覆盖方括号 getter 和 setter)?

标签: javascripttyped-arrayssquare-bracket

解决方案


推荐阅读