【问题标题】:Arbitrary matrix or array size in SwiftSwift 中的任意矩阵或数组大小
【发布时间】:2016-11-11 16:30:05
【问题描述】:

我熟悉使用 NumPy 在 Python 中创建 MxN 矩阵,例如:

In [1]: import numpy as np

In [2]: np.zeros((10,5))
Out[2]:
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]]) 

在 Swift 中,SIMD 可以创建小矩阵并对其执行操作(见下文),但它似乎仅限于 4x4 矩阵的最大大小。

import simd

let mat = float2x2([[1,2],[3,4]])
mat[0]*9

有没有办法在 Swift 中定义任意大小的 MxN 维矩阵并对该矩阵执行操作?

【问题讨论】:

    标签: arrays swift matrix simd accelerate-framework


    【解决方案1】:

    如果“矩阵”是指“数组的数组”,则可以使用以下语法:

    var matrix = Array(count: 10, repeatedValue: Array(count: 5, repeatedValue: 0.0))
    

    这将创建一个 10 x 5 的零矩阵。

    【讨论】:

    • 这确实创建了一个 MxN 矩阵,但它不允许将操作广播到矩阵中的值。在我用 SIMD 声明矩阵的示例中,我可以将其乘以 9;此操作不适用于 Array 集合类型。
    • 就像我说的,它创建了一个数组数组,而不是数学意义上的矩阵。与您需要 NumPy 在 Python 中执行此操作类似,您需要在 Swift 中使用类似的科学库。我发现的一个是Swift Matrix Library。似乎也受到 NumPy 的启发
    • 好的,我来看看 Swift Matrix。但是为什么 SIMD 只允许最大 4x4 的矩阵尺寸?
    • @wigging,SIMD 旨在利用硬件 SIMD 功能,例如包含 4 个浮点数的 128 位寄存器。检查Accelerate framework 以查找更通用的向量/数组计算。
    • @OOPer 我不熟悉 Accelerate。它是为向量和数组提供自己的类型,还是应该将它们创建为 Swift 数组?
    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多