我現在正在練習矩陣,但我並不確定如何以最有效的方式解決我遇到的一些問題。在矩陣上練習 - Ocaml
我的第一個「問題」是優化功能。我試圖做的是迭代通過'矩陣'是一個數組數組。 對於由0到4之間的一個整數標識的每一行(矩陣的大小爲(5,10)),我計算有多少「一」。
我不得不將它分成三個不同的功能,但我想知道是否還有更好的方法來解決這個問題?
let count m i =
let ret=Array.fold_left (fun x y -> if y=1 then x+1 else x) 0 (m.(i)) in
ret;;
let rec clear l =
match l with
|[]->[]
|(a,b)::[]->if b=0 then [] else (a,b)::[]
|(a,b)::c->if b=0 then clear c else (a,b)::clear c;;
let all_moves s =
match s with
|(a,_)->clear[(0,count a 0);(1,count a 1);(2,count a 2);(3,count a 3);(4,count a 4)];;
其次,我的主要問題是一次遍歷整個矩陣。 我試圖計算矩陣中所有的1,除了param「i」標識的行外。 我嘗試了幾件事情,但我現在真的陷入了困境。
let countall m i =
let ret=Array.fold_left (fun x y -> if pos != i then x + y else())
(Array.fold_left (fun x y -> if y=1 then x+1 else x) 0 (m.(i)))
0 m in
ret;;
我想感謝你提前爲您的幫助,我想我可能會給出一個矩陣,爲您測試我的功能:
let c = [|[|1; 1; 1; 1; 1; 0; 0; 0; 0; 0|]; [|1; 1; 1; 1; 1; 1; 1; 1; 0; 0|];
[|1; 1; 1; 1; 1; 1; 1; 1; 1; 0|]; [|1; 0; 0; 0; 0; 0; 0; 0; 0; 0|];
[|1; 1; 1; 1; 1; 1; 1; 1; 1; 1|]|]
此致, 拉瑪
事實上mapi在處理矩陣時非常有用,因爲我們可以在索引上應用第一個函數,然後在該行上應用第一個函數。在我的其餘工作中,它確實幫助了我很多。 非常感謝! –