D3 could come with a simple representation of matrix data.
matrix = {
values: [[1, 2], [3, 4]], // sorted row-wise by default
rows_iter: function () { return this.values },
columns_iter: function () { return iterator_over_the_transpose_of(this.values) },
flat_rows_iter: function () { return iterator_over_flattened(this.values) },
flat_columns_iter: function () { return iterator_over_the_flattened_transpose_of(this.values) },
rows: function () { return copy(this.values) },
columns: function () { return copy(transpose(this.values)) },
flat_rows: function () { return copy(flattened(this.values)) },
flat_columns: function () { return copy(flattened(transpose(this.values))) },
transpose: function() {
return {
values: transpose(this.values),
rows_iter: function () { return this.values },
columns_iter: function () { return iterator_over_the_transpose_of(this.values) },
flat_rows_iter: function () { return iterator_over_flattened(this.values) },
flat_columns_iter: function () { return iterator_over_the_flattened_transpose_of(this.values) },
rows: function () { return copy(this.values) },
columns: function () { return copy(transpose(this.values)) },
flat_rows: function () { return copy(flattened(this.values)) },
flat_columns: function () { return copy(flattened(transpose(this.values))) },
}
},
};
D3 could come with a simple representation of matrix data.
Earlier sketch of roughly what this would look like: