Ios 如何在Swift中将2D数组变量分配给大的浮动矩阵?
我需要在Swift中存储并经常使用两个相对较大的矩阵(准确地说,每个矩阵为160 x 128)。为了初始化一个常量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.
让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数组(除非您实现了一个)。您所描述的是嵌套数组,它们的特征稍有不同:
- 更像:
- 而不是像:
[[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。