gpt4 book ai didi

Swift - 如何减少矩阵

转载 作者:搜寻专家 更新时间:2023-11-01 06:34:00 24 4
gpt4 key购买 nike

我有一个 3 维数组(array[x][y][z]x y z 可以灵活)

var array = [ [[1,1,1],[0,0,0],[1,1,1]],
[[1,0,1],[1,0,1],[1,0,1]],
[[1,1,1],[0,0,0],[1,1,1]]
]

如何将 3D 缩小为 2D 到:array[z][y]

[3,1,3],[2,0,2],[3,1,3]

我阅读了说明 here但不知道如何申请我的。

更新:这是逻辑 enter image description here

enter image description here

最佳答案

让我们首先形成一个效用函数作为矩阵式数组的扩展(“cw”表示按列):

extension Array where Element == [[Int]] {
func cwsum(_ ix1:Int, _ ix2:Int) -> Int {
return reduce(0) {$0 + $1[ix1][ix2]}
}
}

那么如果数组是:

let array = [[[1,1,1],[0,0,0],[1,1,1]],
[[1,0,1],[1,0,1],[1,0,1]],
[[1,1,1],[0,0,0],[1,1,1]]]

...那么答案是:

[[array.cwsum(0,0), array.cwsum(1,0), array.cwsum(2,0)],
[array.cwsum(0,1), array.cwsum(1,1), array.cwsum(2,1)],
[array.cwsum(0,2), array.cwsum(1,2), array.cwsum(2,2)]]
// [[3, 1, 3], [2, 0, 2], [3, 1, 3]]

但是等等——我想我在这里看到了一个模式!我们可以在不对索引进行硬编码的情况下重写它,如:

var result = [[Int]]()
for j in 0..<3 {
var r1 = [Int]()
for i in 0..<3 {
r1.append(array.cwsum(i,j))
}
result.append(r1)
} // result is now [[3, 1, 3], [2, 0, 2], [3, 1, 3]]

好的,但是在我们可以循环和追加的地方,我们可以用map代替,从而将i变成map变量:

var result = [[Int]]()
for j in 0..<3 {
result.append((0..<3).map{i in array.cwsum(i,j)})
}

但是我们也可以为 j 这样做——因此它变成了一行:

result = (0..<3).map{j in (0..<3).map{i in array.cwsum(i,j)}}

关于Swift - 如何减少矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43810327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com