[英]cblas_dgemm issues in Swift using Accelerate Framework
我想在Swift中将两个矩阵相乘。 我在此线程中找到了一个很好的答复: 使用32位和64位Accelerate框架快速进行矩阵乘法 ,其中有人告诉我使用cblas_dgemm将两个矩阵相乘。 这是我的代码:
import SpriteKit
import Accelerate
class GetMatrix {
var cols:Int, rows:Int
var matrix:[Double]
init(cols:Int, rows:Int) {
self.cols = cols
self.rows = rows
matrix = Array(count:cols*rows, repeatedValue:0.0)
}
subscript(col:Int, row:Int) -> Double {
get {
return matrix[cols * row + col]
}
set {
matrix[cols*row+col] = newValue
}
}
func colCount() -> Int {
return self.cols
}
func rowCount() -> Int {
return self.rows
}
}
class GameScene: SKScene {
var firstMatrix = GetMatrix(cols: 18, rows: 18)
var secondMatrix = GetMatrix(cols: 18, rows: 18)
var answerMatrix = GetMatrix(cols: 18, rows: 18)
override func didMoveToView(view: SKView) {
for c in 0...17 {
for r in 0...17 {
firstMatrix[r,c] = 2.0
}
}
for c in 0...17 {
for r in 0...17 {
secondMatrix[r,c] = 1.0
}
}
for c in 0...17 {
for r in 0...17 {
answerMatrix[r,c] = 0.0
}
}
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 18, 18, 18, 1.0, firstMatrix, 18, secondMatrix, 18, 0.0, answerMatrix, 18) // Error in this line
}
}
该代码不会生成。 cblas_dgemm所在的行有此问题。 它说“ GetMatrix”不能转换为“ UnsafePointer”。请帮助,我该如何解决?
var firstMatrix = GetMatrix(cols: 18, rows: 18)
var secondMatrix = GetMatrix(cols: 18, rows: 18)
var answerMatrix = GetMatrix(cols: 18, rows: 18)
.
.
.
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 18, 18, 18, 1.0, firstMatrix, 18, secondMatrix, 18, 0.0, answerMatrix, 18)
您的代码将GetMatrix类传递给cblas_dgemm。 您将必须传递对实际矩阵的引用。 就像是
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 18, 18, 18, 1.0, &firstMatrix.matrix, 18, &secondMatrix.matrix, 18, 0.0, &answerMatrix.matrix, 18)
(前提是其他参数正确)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.