matrix_multiply = (A, B) => {
function dot(v, w) {
return v.map((a, i) => a * w[i]).reduce((a, b) => a + b, 0);
}
const M = Array(A.length),
Bt = d3.transpose(B);
for (let i = 0; i < A.length; i++) {
const line = Array(Bt.length);
for (let j = 0; j < Bt.length; j++) {
line[j] = dot(A[i], Bt[j]);
}
M[i] = line;
}
return M;
}