如何添加列表 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