【问题标题】:How do I add y-values with different x-values?如何添加具有不同 x 值的 y 值?
【发布时间】:2021-02-01 15:13:07
【问题描述】:

我有两条曲线要求和。 x 和 y 值存储在数组中。问题是,两条曲线的 x 值不一样。

x1 = [0.56, 1.06, 1.56, 2.06, 2.56]
y1 = [29.1, 27.3, 26.6, 24.7, 20.3]

x2 = [0.42, 0.92, 1.42, 1.92, 2.42]
y2 = [51.8, 43.6, 40.2, 36.4, 34.5]

请注意,x 值不同,但 x 值之间的间隔保持 0.5。 现在我如何计算类似于 y1+y2=y3 但考虑不同 x 值的两条曲线的总和?As you can see in the picture, I want to get the values of the new curve y3

【问题讨论】:

  • 您可以创建一个新的 x 值列表 x3,它是 x1x2 的并集,然后在这些值处插入 y1y2y3 是插入的 y1y2 的总和。您可以使用numpy.interp 进行插值:see the manual

标签: python sum numeric curve


【解决方案1】:
import matplotlib.pyplot as plt
import numpy as np

x1 = [0.56, 1.06, 1.56, 2.06, 2.56]
y1 = [29.1, 27.3, 26.6, 24.7, 20.3]

x2 = [0.42, 0.92, 1.42, 1.92, 2.42]
y2 = [51.8, 43.6, 40.2, 36.4, 34.5]

# calculate the minimum x value
min_x = min(min(x1), min(x2))
# calculate the maximum x value
max_x = max(max(x1), max(x2))

# creating interpolator
p1 = lambda x: np.interp(x, x1, y1)
p2 = lambda x: np.interp(x, x2, y2)

x = sorted(x1+x2)
y1 = [p1(i) for i in x]
y2 = [p2(i) for i in x]

# calculator y3
y3 = [i+j for i,j in zip(y1,y2)]

plt.plot(x, y1, label='y1')
plt.plot(x, y2, label='y2')
plt.plot(x, y3, label='y3')
plt.legend()
plt.show()

【讨论】:

  • 非常感谢。这有很大帮助!我稍微修改了您的解决方案: 1. 似乎没有使用 min_x 和 max_x 变量,所以我省略了那部分代码。 2. 我只为 x1 值插入 y2 值,然后在 x1 上添加 y1 和新的 y2 值。
猜你喜欢
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 2022-07-20
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 2022-11-13
  • 2021-12-07
相关资源
最近更新 更多