讓我們開始(「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