Arrays 在Swift中填充数组的函数方法

Arrays 在Swift中填充数组的函数方法,arrays,swift,Arrays,Swift,我需要填充一个描述矩阵[[Double]]的数组。矩阵的每个元素的形式如下: a(i,j) = exp(a*(i+j) + b*min(i,j)) 有没有一种优雅的方法可以做到这一点,而不是使用两个嵌入式循环 您可以使用映射两次来创建矩阵。这是一种功能性方法,实际上只是发动机罩下的两个回路: let maxi = 5 // largest acceptable index let maxj = 3 // largest acceptable index let a = 2.3 let b

我需要填充一个描述矩阵[[Double]]的数组。矩阵的每个元素的形式如下:

a(i,j) = exp(a*(i+j) + b*min(i,j))

有没有一种优雅的方法可以做到这一点,而不是使用两个嵌入式循环

您可以使用
映射
两次来创建
矩阵
。这是一种功能性方法,实际上只是发动机罩下的两个回路:

let maxi = 5  // largest acceptable index
let maxj = 3  // largest acceptable index

let a = 2.3
let b = 3.4

let matrix = (0...maxi).map { i in (0...maxj).map { j in exp(a * Double(i + j) + b * Double(min(i, j))) } }
如果我们将其格式化为以下格式,可能会更容易阅读:

let matrix = (0...maxi).map { i in
                 (0...maxj).map { j in
                     exp(a * Double(i + j) + b * Double(min(i, j)))
                 }
             }

与使用循环相比,它的一个优点是可以创建只读的矩阵(
let
)。当然,如果您希望它是可变的,您总是可以将其设置为
var

似乎min函数存在问题。错误信息:“表达式太复杂,无法在合理的时间内解决;考虑把表达式分解成不同的子表达式。”我试图替换MIN(你确定你输入的是否正确)?我在发帖前在操场上进行了测试。你的A和B VARS是双倍的吗?(1…n).map{i in(1…n).map{j in exp(Double(i+j)*m+0.5*sigma2*(Double(i+j)+2*Double(min(i,j)))}m和sigma2是let-Double