Ios 如何在Swift中将2D数组变量分配给大的浮动矩阵?

Ios 如何在Swift中将2D数组变量分配给大的浮动矩阵?,ios,arrays,swift,parsing,matrix,Ios,Arrays,Swift,Parsing,Matrix,我需要在Swift中存储并经常使用两个相对较大的矩阵(准确地说,每个矩阵为160 x 128)。为了初始化一个常量2D双数组来保存该矩阵,我编写了如下内容:让myMatrix=[[3.2,5.8976,5.2],[1e-4,0.3,8.56]。这个2x3阵列只是一个例子。当您尝试编写一个160 x 128浮点矩阵时,需要很多行。我用一个MATLAB脚本键入了这个长表达式,我就是为此编写的。然而,当我复制并粘贴这个大矩阵的很长表达式时,XCode停止响应。它无法处理“ViewController.

我需要在Swift中存储并经常使用两个相对较大的矩阵(准确地说,每个矩阵为160 x 128)。为了初始化一个常量2D双数组来保存该矩阵,我编写了如下内容:
让myMatrix=[[3.2,5.8976,5.2],[1e-4,0.3,8.56]
。这个2x3阵列只是一个例子。当您尝试编写一个160 x 128浮点矩阵时,需要很多行。我用一个MATLAB脚本键入了这个长表达式,我就是为此编写的。然而,当我复制并粘贴这个大矩阵的很长表达式时,XCode停止响应。它无法处理“ViewController.swift”文件中如此大的数据行。因此,我需要找到另一种方法将矩阵存储在iPhone应用程序中。我已经检查了要使用的“XML”、“plist”和“CSV”文件格式。不幸的是,没有一个对我有用。我正在寻找一个简单的解决方案。

欢迎使用StackOverflow。这里有几个问题,我将尽力解决它们:

没有二维阵列 从技术上讲,Swift没有2D数组(除非您实现了一个)。您所描述的是嵌套数组,它们的特征稍有不同:

  • 不能保证这样的数组具有相同大小的行。第一个可能是160宽,第二个可能是空的
  • 它的性能特性较差,因为它是一个数组数组,而不是一个包含所有元素的连续数组。也就是说,它存储在

    • 更像:

    • 而不是像:

  • ViewController应该做什么 它应该控制视图。在我看来,存储160x128矩阵听起来不像是“控制视图”,因此,将这样的代码放在那里是完全不合适的

    编译大型表达式 在没有类型提示的情况下,Swift类型检查器只能推断代码中使用的类型。例如,虽然
    [[1,2,3],[4,5,6]
    看起来很像
    数组,但如果上下文要求,它实际上可以用来初始化
    数组片

    在Swift中,文字表达式可以有多种类型之一。用于数组的方括号语法实际上可以用于初始化任何符合
    ExpressibleByArrayLiteral
    的类型(例如
    Set
    ArraySlice
    ,或您自己发明的任何此类类型)。类似地,整数文本可用于初始化符合
    ExpressibleByIntegerLiteral
    的任何类型,例如
    Float
    Double
    ,以及
    (U)Int(64 | 32 | 16 | 8)
    的每个变量。综上所述,数组文字有很多可能的类型,这需要类型检查器很长时间来计算

    您可以通过完全指定类型(例如,给出变量的类型提示:
    let matrix:[[Double]]=[…]
    )来帮助实现这一点。但即使如此,此数据太大,无法放入Swift文件中

    使用序列化格式
    …是正确的方法。在这种情况下,我认为CSV可能是最合适的(它真的很擅长存储这样的方形表格数据)。你说你“检查”了“XML”、“plist”和“CSV”文件格式(我不知道“检查”在这里是什么意思),并且“在那些为我工作的文件格式中”(不适用于您?这意味着什么,代码有一些检查
    if(user==Serhat)dontWork()
    ?)。这是一个好的解决方案的正确方法。如果你被困在那里,你应该发布一个问题,详细说明到底哪里出了问题,以便其他人能够真正帮助你。

    哇。我印象深刻。这是一个多么详细的答案。谢谢。我问了一个如此不具体、开放式的问题,因为我不知道我不知道什么。我不得不跳到这个问题上来。我试图解决的问题不需要任何图形。它只需要一些数学。根据我在Swift上的数学计算结果,它将播放不同的声音文件。通过你的回答,我学到了很多东西。现在,我知道了我不知道的东西。而且,我现在有更具体的问题:是吗使用[[Double]]用于数学运算的数组是否有效?或者,是否有另一种推荐的……实现大尺寸线性代数运算的方法?作为一个更具体的问题,我实现了此链接中给出的代码:但是,当我在iPhone上运行代码时,会出现一条致命错误消息。它表示存在零值。我在internet上查看了这(这就是我所说的检查),但我找不到任何解决方案。我想,这是关于行尾字符的问题。再次感谢。我非常感谢您的详细回答。最后,这里是确切的错误消息:“致命错误:在展开可选值时意外发现零:文件”@SerhatSoyer is
    [[Double]]
    足够了?可能吧。这取决于你在做什么。可能有一些线性代数库可以有效地实现你可能需要的各种数据结构/算法,但是,我没有尝试过任何一种,所以我没有任何具体的建议。@SerhatSoyer,“CSV解析器”例如,考虑一个CSV文件的内容:<代码> a,“这些应该是,一起”,c< /代码>。该实现不知道如何处理引号串,逗号具有它们的字面意义,而不是它们作为分隔符号的意义,因此它会给出“[ A””、“应该是”的错误结果。“'together'”、“c”]。这可能就足以满足您的需要,但我建议您使用现有的实现,如SwiftCSV。