首页 > 代码库 > IOS中的矩阵和向量运算
IOS中的矩阵和向量运算
为工程添加引入库文件Accelerate.framework
然后再要进行计算的swift文件中
import Accelerate一、向量和常数运算
函数形式
vDSP_vs***D(vector, 1, &scalar, &result, 1, length_of_vector)
这里的1代表对所有向量元素进行操作,如果是2,则每隔一个进行操作。绝大部分情况是1。
具体实例1、向量和常数相加
<pre name="code" class="plain">var v = [4.0, 5.0] var s = 3.0 var vsresult= [Double](count : v.count, repeatedValue : 0.0) vDSP_vsaddD(v, 1, &s, &vsresult, 1, vDSP_Length(v.count)) vsresult // returns [7.0, 8.0]
2、向量和常数相乘
vDSP_vsmulD(v, 1, &s, &vsresult, 1, vDSP_Length(v.count)) vsresult // returns [12.0, 15.0]
3、向量和常数相除
vDSP_vsdivD(v, 1, &s, &vsresult, 1, vDSP_Length(v.count)) vsresult // returns [1.333333333333333, 1.666666666666667]
vDSP_v***D(vector_1, 1, vector_2, 1, &result, 1, length_of_vector)这里的1和一中的一样,代表对每一个元素进行操作
1、向量对应相加
var v1 = [1.0, 2.0] var v2 = [3.0, 4.0] var vvresult = [Double](count : 2, repeatedValue : 0.0) vDSP_vaddD(v1, 1, v2, 1, &vvresult, 1, vDSP_Length(v1.count)) vvresult // returns [4.0, 6.0]
2、向量对应相乘
vDSP_vmulD(v1, 1, v2, 1, &vvresult, 1, vDSP_Length(v1.count)) vvresult // returns [3.0, 8.0]
3、向量对应相除
vDSP_vdivD(v1, 1, v2, 1, &vvresult, 1, vDSP_Length(v1.count)) vvresult // returns [3.0, 2.0]4、向量点乘
var v3 = [1.0, 2.0] var v4 = [3.0, 4.0] var dpresult = 0.0 vDSP_dotprD(v3, 1, v4, 1, &dpresult, vDSP_Length(v3.count)) dpresult // returns 11.0
三、矩阵运算
由于这个库对矩阵的操作采用一维数组,所以加减操作和向量一样
1、矩阵乘法
vDSP_mmulD(matrix_1, 1, matrix_2, 1, &result, 1, rows_of_matrix_1, columns_of_matrix_2, columns_of_matrix_1_or_rows_of_matrix_2)注意:由于两个矩阵相乘,前一个矩阵的列数必须等于后一个矩阵的行数,所以给出一个就行了。
var m1 = [ 3.0, 2.0, 4.0, 5.0, 6.0, 7.0 ] var m2 = [ 10.0, 20.0, 30.0, 30.0, 40.0, 50.0] var mresult = [Double](count : 9, repeatedValue : 0.0) vDSP_mmulD(m1, 1, m2, 1, &mresult, 1, 3, 3, 2) mresult // returns [90.0, 140.0, 190.0, 280.0, 370.0, 270.0, 400.0, 530.0]
2、求逆矩阵
func invert(matrix : [Double]) -> [Double] { var inMatrix = matrix var pivot : __CLPK_integer = 0 var workspace = 0.0 var error : __CLPK_integer = 0 var N = __CLPK_integer(sqrt(Double(matrix.count))) dgetrf_(&N, &N, &inMatrix, &N, &pivot, &error) if error != 0 { return inMatrix } dgetri_(&N, &inMatrix, &N, &pivot, &workspace, &N, &error) return inMatrix }<pre name="code" class="plain">var m = [1.0, 2.0, 3.0, 4.0] invert(m) // returns [-2.0, 1.0, 1.5, -0.5]
3、矩阵转置
vDSP_mtransD(matrix, 1, &result, 1, number_of_rows_of_result, number_of_columns_of_result)举例
var t = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] var mtresult = [Double](count : 6, repeatedValue : 0.0) vDSP_mtransD(t, 1, &mtresult, 1, 3, 2) mtresult // returns [1.0, 4.0, 2.0, 5.0, 3.0, 6.0]
IOS中的矩阵和向量运算
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。