Пример #1
0
        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));
        }