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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Swift中将2D数组变量分配给大的浮动矩阵?相关的知识,希望对你有一定的参考价值。

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

答案

欢迎使用StackOverflow。这里有一些问题,我将尝试解决所有问题:

没有二维数组

[Technically,Swift没有2D数组(直到您实现一个)。您要描述的是嵌套数组,它们的特性略有不同:

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

    • 更多类似:

      array of arrays

    • 比喜欢:

      contiguous storage

ViewController应该做什么

它应该控制视图。对我来说,存储160x128矩阵听起来不像是“控制视图”,因此,对于将这样的代码放在这里完全不适合]

编译大表达式

没有类型提示,Swift类型检查器将在我们的代码中推断正在播放的类型。例如,虽然[[1, 2, 3], [4, 5, 6]]看起来很像Array<Array<Int>>,但实际上,它可以用来初始化ArraySlice<Set<Double>>,如果上下文需要的话。

在Swift中,文字表达式可以具有多种类型之一。实际上,用于Array的方括号语法可用于初始化符合ExpressibleByArrayLiteral的任何类型(例如SetArraySlice或您自己发明的任何此类)。同样,整数文字可用于初始化符合ExpressibleByIntegerLiteral的任何类型,例如FloatDouble(U)Int(64|32|16|8)的每个变体。总而言之,数组文字的lot可能是可能的类型,这会使类型检查器花很长时间才能求值。

您可以通过完全指定类型来帮助此操作(例如,在变量let matrix: [[Double]] = [ ... ]上提供类型提示。但即使这样,此数据仍然太大,无法放入Swift文件中。

使用序列化格式

...是正确的方法。在这种情况下,我认为CSV可能是最合适的(它非常适合存储像这样的方形表格数据)。您说您“检查了” XML”,“ plist”和“ CSV”文件格式”(我不知道“检查”在这里是什么意思),并且“其中一些对我有用”(对< [you?是什么意思,代码中有一些校验if (user == Serhat) dontWork()?)。这是一个好的解决方案的正确方法。如果您被困在那里,则应该发布一个问题,详细说明出了什么问题,以便其他人实际上可以为您提供帮助。

以上是关于如何在Swift中将2D数组变量分配给大的浮动矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

在 swift 中将 String 类型数组转换为 Float 类型数组 不能将类型 'String' 的值分配给类型 'Double' 的下标。

如何在 swift 中将子类 NSManagedObject 分配给 var(而不是常量)

如何在 iOS 的 swift 中将浮动操作按钮放在 tableView 中?

在 Swift 中将字符串拆分为数组?

无法在getDocuments querysnapshot(Swift)中将变量分配给Firebase数据[重复]

在 python 中将 4D 数组与 2D 数组相乘和求和的最快方法?