Я пытаюсь реализовать класс 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)?