【问题标题】:Netlogo: Sum a list of lists of equal length element-wiseNetlogo:按元素对等长列表的列表求和
【发布时间】:2018-08-03 04:41:14
【问题描述】:

我有一个等长列表的列表,例如

[[0 1 0] [2 3 0] [4 4 2] [0 1 0]]

我怎样才能得到列表[6 9 2],它总结了四个列表中的条目?

【问题讨论】:

    标签: netlogo


    【解决方案1】:
    let _lst [[0 1 0] [2 3 0] [4 4 2] [0 1 0]] show reduce [[?1 ?2] -> (map + ?1 ?2)] _lst
    

    作为一个程序:

    to-report aggregate-lists [list-of-lists]
      report reduce [[?1 ?2] -> (map + ?1 ?2)] list-of-lists
    end
    

    【讨论】:

    • 这完美解决了我说的问题。它不能解决其他聚合函数的相关问题,如 entry-wise median(而不是 sum),不能像 reduce 那样连续处理。
    • @janlo 我想您应该只期待您实际提出的问题的答案。但请随时单独提出您的新问题。
    【解决方案2】:

    更擅长列表的人会出现并更干净地执行此操作,但这很有效。

    to testme
      let inlist [[0 1 0] [2 3 0] [4 4 2] [0 1 0]]
      let outlist []
      let ii 0
      while [ii < length item 1 inlist ]
      [ let items map [ x -> item ii x ] inlist
        print items
        set outlist lput reduce [ [a b] -> a + b] items outlist
        set ii ii + 1
      ]
      print outlist
    end
    

    它的作用是创建第一个条目的列表(带有let items),然后将它们与reduce 相加,然后移动到第二个条目等。

    您可能还想查看Netlogo: How to compute sum of items of lists within a list? 这个问题,它适用于单个条目。

    【讨论】:

      【解决方案3】:

      我一直在寻找“单线”并最终制作了它:

      to-report aggregate-lists [list-of-lists]
         report map [ i -> sum (map [li -> item i li] list-of-lists) ] range length item 0 list-of-lists
      end
      

      您将所有列表的 item i 总和的报告器映射到索引向量 range length item 0 list-of-lists(在示例中为 [0 1 2])。

      【讨论】:

      • 这也适用于其他入口聚合,例如 median 而不是 sum。
      猜你喜欢
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2019-07-19
      • 2021-08-09
      相关资源
      最近更新 更多