让我们开始(“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]]
好了,但在这里我们可以循环和append
,我们可以map
代替,从而把i
到地图变量:
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)}}
将第一个数组转换为第二个数组的操作是什么? – matt
在Python中,我正在使用'add.reduce(array,0)'。以下是一个https://docs.scipy.org/doc/numpy/reference/generated/numpy.ufunc.reduce.html – hoangpx
我知道你正在做某种矩阵代数的解释,但直到你能提供关于将第一个数组转换为第二个数组的步骤说明,您无法对其进行编码。这与Swift“reduce”本身无关。教_me_把第一个数组变成第二个数组,然后我可以尝试教计算机去做。 – matt