簡體   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