Реализация матрицы столбцов в виде массива, как объекты - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь реализовать класс Matrix в Javascript, используя один 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].

Есть ли способ каким-либо образом сопоставить ArrayBuffer с TypedArray, поэтому TypedArray не просто обращается к одной непрерывной последовательности ArrayBuffer?

Или есть другой подход (может быть, как-то переопределяя квадратные скобки getter и setter)?

...