IOS中的矩陣和向量運算

來源:互聯網
上載者:User

標籤:ios   矩陣   向量   matrix   vector   

為工程添加引入庫檔案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.0var 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.0vDSP_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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.