Source code for pyacs.lib.glinalg.dot

"""Matrix/matrix, matrix/vector, or vector/vector multiplication (BLAS)."""

from scipy import linalg


[docs] def dot(A, B): """Matrix/matrix, matrix/vector, or vector/vector multiplication (BLAS). Parameters ---------- A : numpy.ndarray Matrix or vector. B : numpy.ndarray Matrix or vector (compatible shape). Returns ------- numpy.ndarray A * B. """ if (A.ndim == 2) and (B.ndim == 2): if (A.flags['C_CONTIGUOUS'] and B.flags['C_CONTIGUOUS']): C = linalg.blas.dgemm(1.0, A, B) elif A.flags['C_CONTIGUOUS']: C = linalg.blas.dgemm(1.0, A, B.T, trans_b=True) elif B.flags['C_CONTIGUOUS']: C = linalg.blas.dgemm(1.0, A.T, B, trans_a=True) else: C = linalg.blas.dgemm(1.0, A.T, B.T, trans_a=True, trans_b=True) elif A.ndim == 2: if A.flags['C_CONTIGUOUS']: C = linalg.blas.dgemv(1.0, A, B) else: C = linalg.blas.dgemv(1.0, A.T, B, trans=True) else: C = linalg.blas.ddot(A, B) return C