我正在尝试计算列表元素的平均值。因此,我必须将十个列表的所有第一个元素分开,然后添加第二个元素等等。
到目前为止,我有这个:
set averagec map [ [x] -> item 0 x] finaltable
set averaged map [ [x] -> item 1 x] finaltable
set averagegemiddelderan map [ [x] -> item 2 x] finaltable
set averageunf map [ [x] -> item 3 x] finaltable
set averagetft map [ [x] -> item 4 x] finaltable
set averagepav map [ [x] -> item 5 x] finaltable
set averagetftt map [ [x] -> item 6 x] finaltable
set averagertft map [ [x] -> item 7 x] finaltable
set averageswit map [ [x] -> item 8 x] finaltable
set averagehm map [ [x] -> item 9 x] finaltable
连连呢?
答案 0 :(得分:1)
以下两种方法可以生成一个列表,其中包含跨行的方法,我相信这就是您所要求的。第一种方法将行相加,然后除以行数。第二种方法转换列表列表(显然是finaltable
的结构),然后在结果中映射mean
。在这两种情况下,finaltable
必须是矩形。
globals [finaltable]
to setup
;fake data (rectangular list of list)
set finaltable n-values 10 [-> n-values 15 [-> random 100]]
end
to go
;first method
let _sum reduce [[?xs ?ys] -> addvecs ?xs ?ys] finaltable
let _n length finaltable
print map [?x -> ?x / _n] _sum
;second method
print map mean transpose finaltable
end
;two helper functions, for the two methods
to-report addvecs [#xs #ys]
report (map + #xs #ys)
end
to-report transpose [#lstlst]
let _n length item 0 #lstlst
let _start fput n-values _n [-> []] #lstlst
report reduce [[?lstlst ?items] -> (map [[?lst ?item] -> lput ?item ?lst] ?lstlst ?items)] _start
end