如何添加列表 netlogo 的元素
how to add up elements of lists netlogo
我正在尝试计算列表元素的平均值。因此我必须单独添加十个列表的所有第一个元素和第二个元素..等等
到目前为止我有这个:
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
建议?
这里有两种方法可以生成包含跨行均值的列表,我相信这正是您所要求的。第一种方法将行相加,然后除以行数。第二种方法转置列表列表(这显然是 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
我正在尝试计算列表元素的平均值。因此我必须单独添加十个列表的所有第一个元素和第二个元素..等等
到目前为止我有这个:
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
建议?
这里有两种方法可以生成包含跨行均值的列表,我相信这正是您所要求的。第一种方法将行相加,然后除以行数。第二种方法转置列表列表(这显然是 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