x和y的大小必须相同

时间:2020-10-22 21:38:53

标签: python numpy matplotlib

我正在使用python绘制正弦波和随机分布,然后显示比率大于或等于3的地方。

我认为我已经完成了90%的工作,但是在尝试绘制错误消息时,始终收到错误消息“ x和y必须具有相同的大小”。我一直在绞尽脑汁,但无法弄清我的缺失。

非常感谢收到任何帮助或指示。

import numpy as np
import math
import matplotlib.pyplot as plt

r= 2*math.pi
dev = 0.1
x = np.array(np.arange(0, r, dev))
y1 = np.array(np.sin(x))
y2 = np.array(np.random.normal(loc=0, scale=0.1, size=63))

mask = y1//y2 >= 3

fit = np.array(x[mask])

print(fit)


plt.plot(x, y1)
plt.scatter(x, fit)
plt.scatter(x, y2, marker=".")
plt.show()

3 个答案:

答案 0 :(得分:2)

在错误点之前将这行插入代码中:

print(len(x), len(fit))

输出:

63 28

您已从序列中明确删除元素,然后期望它们的大小相同。您仍然有63个x值,但现在只有28个y值。由于您没有跟踪问题并解释了此散点图的用途,因此我无法知道“修复”的可能。也许列出一个点(x-y对),然后过滤那个以得到合适的y1 / y2比率?

答案 1 :(得分:1)

不确定这是否是您想要的,但这会分散与您的面罩相对应的正弦曲线上的点。

import numpy as np
import math
import matplotlib.pyplot as plt

r= 2*math.pi
dev = 0.1
x = np.array(np.arange(0, r, dev))
y1 = np.array(np.sin(x))
y2 = np.array(np.random.normal(loc=0, scale=0.1, size=63))

mask = y1//y2 >= 3

fit_x = np.array(x[mask])
fit_y = np.array(y1[mask])


plt.plot(x, y1)
plt.scatter(fit_x, fit_y)
plt.scatter(x, y2, marker=".")
plt.show()

答案 2 :(得分:1)

在您的行plt.scatter(x, fit)中,您尝试将x值与适合值分散。但是,适合的大小仅为25号文件,而x的大小为63号(y1和y2顺便说一句,这就是该部分起作用的原因)。

mask基本上是False或True值的数组。这意味着如果您使用np.array(x[mask])函数。它将仅创建x实际为True的值的数组,这似乎是您想要的。但是您只能将其散布在np.array(np.sin(fit))之类的东西上,否则大小与散布不兼容。