public BigMatrix tm(BigMatrix B) {
        if (m != B.m) {
            throw new IllegalArgumentException(String.format("Matrix multiplication A' * B: %d x %d vs %d x %d", m, n, B.m, B.n));
        }

        BigMatrix C = new BigMatrix(n, B.n);
        C.mm(TRANSPOSE, this, NO_TRANSPOSE, B);
        return C;
    }
@Test
    public void testTm() {
        System.out.println("tm");
        double[][] A = {
                {4.0, 1.2, 0.8},
                {1.2, 9.0, 1.2},
                {0.8, 1.2, 16.0}
        };
        double[] B = {-4.0, 1.0, -3.0};
        double[] C = {-1.0505, 0.2719, -0.1554};

        BigMatrix a = BigMatrix.of(A).inverse();
        BigMatrix b = BigMatrix.column(B);

        assertTrue(MathEx.equals((b.tm(a)).toArray()[0], C, 1E-4));
        assertTrue(MathEx.equals((b.transpose().mm(a)).toArray()[0], C, 1E-4));
        assertTrue(MathEx.equals((b.transpose(false).mm(a)).toArray()[0], C, 1E-4));
    }