如何添加列表netlogo的元素

时间:2018-03-19 09:57:29

标签: list mapping 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

连连呢?

1 个答案:

答案 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