Python ValueError:x和y必须具有相同的第一个维度

Python ValueError:x和y必须具有相同的第一个维度,python,matplotlib,Python,Matplotlib,我收到一条错误消息 Traceback (most recent call last): File "C:\Python27\ANN.py", line 165, in <module> patternRecognition() File "C:\Python27\ANN.py", line 131, in patternRecognition plt.plot(xp, eachPattern) File "C:\Python27\lib\site-pac

我收到一条错误消息

Traceback (most recent call last):
  File "C:\Python27\ANN.py", line 165, in <module>
    patternRecognition()
  File "C:\Python27\ANN.py", line 131, in patternRecognition
    plt.plot(xp, eachPattern)
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 3093, in plot
    ret = ax.plot(*args, **kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\axes\_axes.py", line 1373, in plot
    for line in self._get_lines(*args, **kwargs):
  File "C:\Python27\lib\site-packages\matplotlib\axes\_base.py", line 303, in _grab_next_args
    for seg in self._plot_args(remaining, kwargs):
  File "C:\Python27\lib\site-packages\matplotlib\axes\_base.py", line 281, in _plot_args
    x, y = self._xy_from_xy(x, y)
  File "C:\Python27\lib\site-packages\matplotlib\axes\_base.py", line 223, in _xy_from_xy
    raise ValueError("x and y must have same first dimension")
ValueError: x and y must have same first dimension
ValueError:x和y必须具有相同的第一个维度

代码如下:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np

date,bid,ask = np.loadtxt('GBPUSD1d.txt', unpack=True,
               delimiter =',',converters={0:mdates.strpdate2num('%Y%m%d%H%M%S')}) 
avgLine = ((bid+ask)/2)
patternAr = []
performanceAr = []
patForRec = []
eachPattern = []

def percentChange(startPoint, currentPoint):
        return ((float(currentPoint)- startPoint)/abs(startPoint))*100.00

def patternStorage():
        patStartTime = time.time()
        x = (len(avgLine))-30
        y = 11
        while y < x:
                pattern = []
                p1 = percentChange(avgLine[y-10], avgLine[y-9])
                ...
                p10 = percentChange(avgLine[y-10], avgLine[y])

                outcomeRange = avgLine[y+20:y+30]
                currentPoint = avgLine[y]
                try:
                        avgOutcome = reduce(lambda x, y: x + y, outcomeRange) / len(outcomeRange)
                except Exception, e:
                        print str(e)
                        avgOutcome = 0

                futureOutcome = percentChange(currentPoint, avgOutcome)
                pattern.append(p1)
                pattern.append(p2)
                pattern.append(p3)
                pattern.append(p3)
                pattern.append(p4)
                pattern.append(p5)
                pattern.append(p6)
                pattern.append(p7)
                pattern.append(p8)
                pattern.append(p9)
                pattern.append(p10)
                patternAr.append(pattern)
                performanceAr.append(futureOutcome)
                y += 1

        patEndTime = time.time()
        print len (patternAr)
        print len (performanceAr)
        print 'Patten storage took:', patEndTime - patStartTime, 'seconds'

def currentPattern():
    cp1 = percentChange(avgLine[-11], avgLine[-10])
    ...
    cp10 = percentChange(avgLine[-11], avgLine[-1])
    patForRec.append(cp1)
    ...  
    patForRec.append(cp10)
    print patForRec

def patternRecognition():
    for eachPattern in patternAr:
        sim1 = 100.00 - abs(percentChange(eachPattern[0], patForRec[0]))
        ...
        sim10 = 100.00 - abs(percentChange(eachPattern[9], patForRec[9]))
        howSim =((sim1+sim2+sim3+sim4+sim5+sim6+sim7+sim8+sim9+sim10))/float(10)

        if howSim > 70:
            patdex = patternAr.index(eachPattern)
            print 'predicted outcome',performanceAr[patdex]
            xp = [1,2,3,4,5,6,7,8,9,10]
            fig = plt.figure()
            plt.plot(xp, patForRec)
            plt.plot(xp, eachPattern)
            plt.show()

patternStorage()
currentPattern()
patternRecognition()
print (len(patForRec))
print (len(eachPattern))
导入matplotlib.pyplot作为plt
将matplotlib.dates导入为mdates
将numpy作为np导入
日期、标书、ask=np.loadtxt('GBP USDAD.txt',unpack=True,
分隔符=',',转换器={0:mdates.strpdate2num(“%Y%m%d%H%m%S'))
avgLine=((出价+出价)/2)
patternAr=[]
性能耳=[]
patForRec=[]
每个模式=[]
def百分比变化(起始点、当前点):
返回((浮动(当前点)-起始点)/abs(起始点))*100.00
def patternStorage():
patStartTime=time.time()
x=(len(avgLine))-30
y=11
当y70:
patdex=模式索引(每个模式)
打印“预测结果”,PerformanceEAR[patdex]
xp=[1,2,3,4,5,6,7,8,9,10]
图=plt.图()
plt.plot(xp,patForRec)
plt.plot(xp,每个模式)
plt.show()
模式存储()
currentPattern()
模式识别()
印刷品(len(patForRec))
打印(len(每个图案))
完整错误消息

Traceback (most recent call last):
  File "C:\Python27\ANN.py", line 165, in <module>
    patternRecognition()
  File "C:\Python27\ANN.py", line 131, in patternRecognition
    plt.plot(xp, eachPattern)
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 3093, in plot
    ret = ax.plot(*args, **kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\axes\_axes.py", line 1373, in plot
    for line in self._get_lines(*args, **kwargs):
  File "C:\Python27\lib\site-packages\matplotlib\axes\_base.py", line 303, in _grab_next_args
    for seg in self._plot_args(remaining, kwargs):
  File "C:\Python27\lib\site-packages\matplotlib\axes\_base.py", line 281, in _plot_args
    x, y = self._xy_from_xy(x, y)
  File "C:\Python27\lib\site-packages\matplotlib\axes\_base.py", line 223, in _xy_from_xy
    raise ValueError("x and y must have same first dimension")
ValueError: x and y must have same first dimension
回溯(最近一次呼叫最后一次):
文件“C:\Python27\ANN.py”,第165行,在
模式识别()
模式识别中的文件“C:\Python27\ANN.py”,第131行
plt.plot(xp,每个模式)
文件“C:\Python27\lib\site packages\matplotlib\pyplot.py”,第3093行,在plot中
ret=最大绘图(*args,**kwargs)
文件“C:\Python27\lib\site packages\matplotlib\axes\\u axes.py”,第1373行,在绘图中
对于自身中的行。获取行(*args,**kwargs):
文件“C:\Python27\lib\site packages\matplotlib\axes\\u base.py”,第303行,位于下一个参数中
对于seg in self.\u plot\u args(剩余,kwargs):
文件“C:\Python27\lib\site packages\matplotlib\axes\\u base.py”,第281行,在绘图参数中
x、 y=自。_xy_自_xy(x,y)
文件“C:\Python27\lib\site packages\matplotlib\axes\\u base.py”,第223行,在\u xy\u中
提升值错误(“x和y必须具有相同的第一个维度”)
ValueError:x和y必须具有相同的第一个维度

问题在于
每个模式中都有11个元素,而所有
xp
都有10个元素。原因可能是在代码的
patternStorage
函数的第52行和第53行,您将
p3
附加到列表中两次:

pattern.append(p3)
pattern.append(p3)
如果你去掉其中的一个,图表就画得很好。虽然它存储在一个循环中,可以多次绘图,但不知道您是否希望这样做


如果您尝试在循环中做更多的事情,那么您必须编写更少的代码,这种您不小心做了两次的事情的问题将更少发生。

我们无法处理您的脚本,因为您没有提供
gbpUSDAD.txt
文件。请做一个完整的最小工作示例。