【问题标题】:Get Centroid from Sequence in N-Dimensions从 N 维序列中获取质心
【发布时间】:2021-12-20 16:41:48
【问题描述】:

我正在尝试获取 n 维系列的质心。

这是我尝试过的:

def get_centroid(point1, point2):
    return sum((q + p) / 2 for p, q in zip(point1, point2))

p = [1, 2, 3, 4, 5, 6, 7]

q = [2, 3, 4, 5, 6, 7, 8]

get_centroid(p, q)
Out[18]: 31.5

但我想要得到的是:

Out[]: [1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5]

我在这里错过了什么?

提前致谢。

【问题讨论】:

  • 为什么get_centroid 会返回一个总和?
  • 因为我对这一切还是陌生的,我正在努力弄清楚。大声笑虽然公平点。我只是想如果它在方括号中,它会返回相同的。

标签: python centroid


【解决方案1】:

使用列表推导而不是 sum 函数,因为:

  1. sum 返回一个迭代的所有元素的总和,所以它现在返回平均值的总和
  2. 相反,您需要每个列表/点中相应值的平均值
  3. 列表推导式创建一个值列表,每个值都由您已经编写的公式给出,以求平均值

尝试以下方法:

代码

def get_centroid(point1, point2):
    return [(q + p) / 2 for p, q in zip(point1, point2)]

p = [1, 2, 3, 4, 5, 6, 7]

q = [2, 3, 4, 5, 6, 7, 8]

print(get_centroid(p, q))

输出

[1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5]

【讨论】:

  • 太棒了!所以,为了我自己的清楚,如果我想返回一个列表,我应该用方括号开始参数吗?我明白为什么 sum () 是错误的。我的意思是作为一般规则。
  • @Noob3000,是的,我已经添加了一个简短的解释,这种方法称为列表理解。或者您可以创建一个空列表并将每个新计算的值附加到它。
猜你喜欢
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 2017-02-15
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
相关资源
最近更新 更多