繁体   English   中英

ValueError:要解包的值太多(预期为 1)?

[英]ValueError: too many values to unpack (expected 1)?

我不断收到“ ValueError: too many values to unpack (expected 1)

它说错误发生在p2, = plt.plot(t, p, 'g--', label='Approx') ,但我看不出该行有问题。 我如何解决它?

def g(x):
    return x * np.sin(1/x)

x = np.linspace(-1, 1, 30)
y = g(x)
t = np.linspace(np.min(x), np.max(x), 100)
p = np.array([g(x) for i in range(len(t))])
xx = np.linspace(np.min(x), np.max(x), 100)
yy = g(xx)
plt.figure(1)
p1, = plt.plot(x, y, 'ro', label='Data points')
p2, = plt.plot(t, p, 'g--', label='Approx')
p3, = plt.plot(xx, yy, 'blue', label='Real')
plt.legend(handles=[p1, p2, p3], loc='best')
plt.xlabel('t')
plt.ylabel('g(x)')
plt.grid(True)
plt.show()

我看到两个问题,您看到的错误是由于您的p变量位于单个元素列表中,因此您可以解压缩它。

第二个问题是tp的长度不同,我不知道如何在不知道你的目标的情况下解决这个问题。

import numpy as np
import matplotlib.pyplot as plt

def g(x):
    return x * np.sin(1/x)

x = np.linspace(-1, 1, 30)
y = g(x)
t = np.linspace(np.min(x), np.max(x), 100)
p = np.array([g(x) for i in range(len(t))])[0]
xx = np.linspace(np.min(x), np.max(x), 100)
yy = g(xx)
plt.figure(1)

print('t')
print(t)
print('p')
print(p)

p1, = plt.plot(x, y, 'ro', label='Data points')
p2, = plt.plot(t, p, 'g--', label='Approx')
p3, = plt.plot(xx, yy, 'blue', label='Real')
plt.legend(handles=[p1, p2, p3], loc='best')
plt.xlabel('t')
plt.ylabel('g(x)')
plt.grid(True)
plt.show()

问题是您的plt.plot(t, p, 'g--', label='Approx')由 30 个matplotlib.lines.Line2D对象组成,但您试图将其分配给长度为1.

如果您只需要该plt.plot(t, p, 'g--', label='Approx')中的第一个元素(并且您需要,如果您只需要在图例中显示),只需获取第一个元素.

p2 = plt.plot(t, p, 'g--', label='Approx')[0]

更好的是,对所有 3 个地块都这样做

由于列表和 np.array 之间的差异,会出现问题。 它们的行为非常不同。

import numpy as np
import matplotlib.pyplot as plt
def g(x):
    return x * np.sin(1/x)

x = np.linspace(-1, 1, 30)
y = g(x)
t = np.linspace(np.min(x), np.max(x), 100)
a = [i for i in range(len(t))]
a = np.array(a)
p = g(a)
xx = np.linspace(np.min(x), np.max(x), 100)
yy = g(xx)
plt.figure(1)
p1, = plt.plot(x, y, 'ro', label='Data points')
p2, = plt.plot(t, p, 'g--', label='Approx')
p3, = plt.plot(xx, yy, 'blue', label='Real')
plt.legend(handles=[p1, p2, p3], loc='best')
plt.xlabel('t')
plt.ylabel('g(x)')
plt.grid(True)
plt.show()

下图

暂无
暂无

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

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