繁体   English   中英

如何在 Haskell 中找到坐标元组列表的平均值?

[英]How do I find the Average of a List of Coordinate Tuples in Haskell?

如何在 Haskell 中添加表示 x 和 y 坐标的元组列表,然后找到所有 x 值和 y 值的平均值(基本上是试图找到一个质心)。

所以假设我有一个 [(1,1),(2,2),(3,6)] 的输入列表,我希望输出是 (2,3)。

这将在没有空间泄漏和不破坏流融合的情况下工作:

{-# LANGUAGE BangPatterns #-}

import Data.Foldable (foldl')

centroid :: (Fractional n, Foldable t) => t (n, n) -> (n, n)
centroid coords = (xsum/count, ysum/count)
 where (xsum,ysum,count) = foldl' go (0,0,0) coords
       go (!xs,!ys,!c) (x,y) = (xs + x, ys + y, c + 1)

如果需要,可以随意将 / 替换为 `div`,将 Fractional 替换为 Integral,和/或在必要时添加 realToFrac 以使您的类型有效。 此外,如果您不想使用 BangPatterns,您可以在所有三个元素上使用 seq。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM