ValueError:x和y必须具有相同的一维异常,但是x和y具有相同的类型和长度

时间:2018-12-06 08:58:39

标签: python numpy matplotlib

因此,在我试图弄清楚如何获取numpy数组的均值并将其绘制出来的同时。我收到以下错误消息:

'ValueError: x and y must have same first dimension, but have shapes (1L,) and (10L,)'  

我的代码如下:

t = np.arange(0,100, 10)
x = np.arange(10)

print type(t), type(x), len(t), len(x), t, x


average = np.array([])
for x in range(len(t)):
    mask = np.ones(len(t), dtype=bool)
    if x is not 0:
        mask[x-1] = False
    mask[x]= False
    if x+1 is not len(t):
        mask[x+1]= False
    b = np.ma.array(t,mask=mask)
    average = np.append(average, np.ma.average(b))


plt.plot(x, t)
plt.plot(x, average)
plt.show'

打印返回以下

<type 'numpy.ndarray'> <type 'numpy.ndarray'> 10 10 [ 0 10 20 30 40 50 60 70 80 90] [0 1 2 3 4 5 6 7 8 9]

,但是在情节中会引发错误。我不明白为什么,因为x和t的长度和类型相同。

我什至试图重现它,但随后突然起作用:

f = np.arange(10)
g = np.arange(0,100, 10)
print f, g
plt.plot(f, g)

[0 1 2 3 4 5 6 7 8 9] [0 10 20 30 40 50 60 70 80 90]

enter image description here

有人可以告诉我为什么它不起作用吗?以及为什么当我尝试重现它时能起作用?

1 个答案:

答案 0 :(得分:1)

列表x的名称在for循环中被x覆盖。将其更改为for i in range即可使用,或者更改列表名称:

t = np.arange(0,100, 10)
x = np.arange(10)

average = np.array([])
for i in range(len(t)):
    mask = np.ones(len(t), dtype=bool)
    if i is not 0:
        mask[i-1] = False
    mask[i]= False
    if i+1 is not len(t):
        mask[i+1]= False
    b = np.ma.array(t,mask=mask)
    average = np.append(average, np.ma.average(b))

plt.plot(x, t)
plt.plot(x, average)

plt.show()

enter image description here