NumSwift

Tests

为 Swift 增加复数运算以及对数组运算的支持。 尽可能利用 Apple 的 Accelerate 框架。

用法

加法

    let test = 10.0
    let testArray = [1.0, 2.0, 3.0, 4.0, 5.0]
    
    let expected = [11.0, 12.0, 13.0, 14.0, 15.0]
    let result = testArray + test
    
    print(result)
    let testArray = [1.0, 2.0, 3.0, 4.0, 5.0]
    let testArray2 = [10.0, 20.0, 30.0, 40.0, 50.0]

    let expected = [11.0, 22.0, 33.0, 44.0, 55.0]
    let result = testArray + testArray2
    
    print(result)

乘法

    let test = 10.0
    let testArray = [1.0, 2.0, 3.0, 4.0, 5.0]
    
    let expected = [10.0, 20.0, 30.0, 40.0, 50.0]
    let result = testArray * test
    
    print(result)
    let testArray = [1.0, 2.0, 3.0, 4.0, 5.0]
    let testArray2 = [10.0, 20.0, 30.0, 40.0, 50.0]

    let expected = [10.0, 40.0, 90.0, 160.0, 250.0]
    
    let result = testArray * testArray2
    
    print(result)

除法

    let test = 10.0
    let testArray = [10.0, 20.0, 30.0, 40.0, 50.0]

    let expected = [1.0, 2.0, 3.0, 4.0, 5.0]
    let result = testArray / test
    
    print(result)
    let testArray = [10.0, 40.0, 90.0, 160.0, 250.0]
    let testArray2 = [1.0, 2.0, 3.0, 4.0, 5.0]

    let expected = [10.0, 20.0, 30.0, 40.0, 50.0]

    let result = testArray / testArray2
    
    print(result)

缩放

您可以将数组在给定范围内缩放到期望的范围。

    let testArray = [0.0, 5.0, 10.0, 20.0]
    let expected = [-1.0, -0.5, 0.0, 1.0]
    
    let scaled = testArray.scale(from: 0...20, to: -1...1)

形状

您可以获取矩阵的形状。 这将返回每一层的计数。 子数组必须都具有相同的长度

    let testArray = [[1,0], [1, 0]]
    let expected = [2, 2]
    
    print(testArray.shape)

矩阵运算

multiply(B: [Element], columns: Int32, rows: Int32, dimensions: Int32 = 1) -> [Element]

dot(_ b: [Element]) -> Element

transpose(columns: Int, rows: Int) -> [Element]

多维

conv2D(_ filter: [[Double]],
              filterSize: (rows: Int, columns: Int),
              inputSize: (rows: Int, columns: Int)) -> Element

conv2D(_ filter: [[Float]],
              filterSize: (rows: Int, columns: Int),
              inputSize: (rows: Int, columns: Int)) -> Element 

向量归一化

func l2Normalize(limit: Element)

func l1Normalize(limit: Element)

clip(_ to: Element)