private static NdArray <T> DotLegacy1x2 <T>(INdArray <T> x, INdArray <T> y) { // x.Shape = [p] // y.Shape = [p, n] // retval.Shape = [n] var p = x.Shape[0]; var n = y.Shape[1]; Guard.AssertShapeMatch(p == y.Shape[0], $"x.Shape[0] = {p}, y.Shape[0] = {y.Shape[0]}"); var rawImpl = new RawNdArrayImpl <T>(new IndexArray(n)); var buffer = rawImpl.Buffer; for (var j = 0; j < n; ++j) { buffer.Span[j] = Zero <T>(); for (var k = 0; k < p; ++k) { buffer.Span[j] = Add(buffer.Span[j], Multiply(x[k], y[k, j])); } } return(new NdArray <T>(rawImpl)); }