BLAS 函数 Dgemm,但所有矩阵都乘以标量
BLAS Functions Dgemm but all matrices are multiplied by a Scalar
是否有任何类似 Dgemm 的矩阵调用来缩放 a 和 b 矩阵?(A,B,C是标量(。
IE c = C * c + (A*op(a(( * (B*op(b((;
奖励积分是否有任何原因不支持,或者它只是在线性代数中不常见,因此通常没有必要?
标准 BLAS 接口不提供独立缩放A
和B
矩阵的直接平均值(在此行话中,它们通常将大写字母用于矩阵/向量,小写字母用于标量(。有关 cblas_?gemm,请参阅 MKL cblas 文档(在 BLAS 实现中是相同的(。
不过,您可以做的是使用中间调用生成B
的缩放版本,将a
和b
设置为零:
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
参数具有相同的效果。
是的,dgemm 通过使用简单的乘法属性来做到这一点。只需参考此处。
c = C*c + (A*op(a))*(B*op(b))
c = C*c + A*(op(a))*B)*op(b)
c = C*c + A*(B*op(a))*op(b)
c = C*c + (A*B)*op(a)*op(b)
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 特征中的自定义标量类型
- 为什么从具有较大阵列的 SIMD 内部函数中获得的相对加速比标量更大?
- 如何在C++中将一个特征张量乘以另一个特征张量的标量和?
- 标量类型的特征模板无法编译固定大小的子矩阵操作
- 结构 init:字符**类型的标量初始值设定项两边的大括号
- 将标准::时间点乘以标量
- 请求从"点*"转换为非标量类型"点"
- 循环中标量乘积的自动矢量化
- 转换为非标量误差是什么意思?我该如何解决?
- 标量类型上的特征模板
- 迭代器和标量对象之间的未定义行为有什么区别吗?
- C++中的标量初始值设定项错误两边的大括号
- MSVC 编译器/链接器何时合成标量/矢量删除析构函数
- 通过运算符使用标量参数重写来修改类成员
- 错误:在 C++ 中从 'Counter' 转换为非标量类型'CountDn'
- 特征:从数组类型中获取标量类型是否记录?
- BLAS 函数 Dgemm,但所有矩阵都乘以标量