BLAS函数Dgemm但所有矩阵都乘以标量

时间:2018-01-23 21:27:57

标签: c++ blas cblas

是否有任何类似Dgemm的矩阵调用可以缩放a和b矩阵? (A,B,C是标量)。

IE    c = C * c +(A * op(a))*(B * op(b));

奖励积分是否有任何理由不支持这种情况,或者它在线性代数中是不常见的,因此通常没有根据?

2 个答案:

答案 0 :(得分:1)

标准BLAS接口不提供单独缩放AB矩阵的直接均值(在这个术语中,它们通常为矩阵/向量和大写字母用于标量)。请参阅MKL cblas documentation for cblas_?gemm(在BLAS实现中它将是相同的。)

您可以做的是通过中间调用生成B的缩放版本,将ab设置为零:

C = c.*C + (0.*A) * (0.*B)

但是,如果将矩阵乘法分解为单个运算(例如行主要顺序):

for( i = 0; i < N; i++ ) {
  for( j = 0; j < M; j++ ) {
    for( ii = 0; ii < K; ii++ ) {
      C[i][j] = C[i][j] + a*A[i][ii]*B[ii][j];
    }
  }
}

您将看到缩放影响两个矩阵的元素。由于标量积是可交换的和关联的,因此使用等于两个标量的乘积的a参数具有相同的效果。

答案 1 :(得分:0)

是的,dgemm通过使用简单的乘法属性来做到这一点。请参阅here

D, [2018-01-25T16:22:14.066436 #89351] DEBUG -- sentry: ** [Raven] compared with non class/module excluded from capture due to environment or should_capture callback
rake aborted!
TypeError: compared with non class/module