我是swift的新手,正在尝试使用加速框架来乘法两个矩阵。
但是我不能让它工作。任何帮助都将不胜感激。代码如下:

import Accelerate

let firstMatrix :[[Float]] = [[1,2],[2,3]]
let secondMatrix : [[Float]] = [[3,2],[1,4]]
var answerMatrix :[[Float]] = [[0,0],[0,0]]

cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 2, 2, 2, 1.0, firstMatrix, 2, secondMatrix, 2, 0.0, &answerMatrix, 2)

print(answerMatrix)

最佳答案

有两个问题:
cblas_dgemm()用于“双精度矩阵”,即元素具有Double类型。对于Float(单精度)矩阵,使用cblas_sgemm()
每个矩阵都必须作为指向一维数组的指针传递给函数。
例子:

let firstMatrix :  [Double] = [1,2 , 2,3]
let secondMatrix : [Double] = [3,2 , 1,4]
var answerMatrix : [Double] = [0,0 , 0,0]

cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 2, 2, 2, 1.0,
    firstMatrix, 2, secondMatrix, 2, 0.0, &answerMatrix, 2)

print(answerMatrix)
// [5.0, 10.0, 9.0, 16.0]

09-11 13:05