2015-11-28 45 views
3

我是openCV的初學者,並且正在嘗試分析sudoku解算器的現有代碼。有這段代碼會引發錯誤。類型錯誤:只能將長度爲1的數組轉換爲Python標量

samples = np.float32(np.loadtxt('feature_vector_pixels.data')) 
responses = np.float32(np.loadtxt('samples_pixels.data')) 

model = cv2.ml.KNearest_create() 
model.train(samples, responses) 

錯誤如下Type Error: Only length-1 arrays can be converted to Python Scalars

完整回溯是如下:

C:\Study stuff\FinalProject>c:\Python27\python.exe Sudoku.py 
Traceback (most recent call last): 
    File "Sudoku.py", line 15, in <module> 
    model.train(samples, responses) 
TypeError: only length-1 arrays can be converted to Python scalars 

任何想法,問題是什麼?

+1

你有完整的追溯? – memoselyk

+0

@memoselyk我加了完整的回溯 – TheFallenOne

回答

9

您得到的錯誤消息:

TypeError: Only length-1 arrays can be converted to Python Scalars 

字面意思是:你已經在一個地方設置多於一個的元件陣列,其中一個單個值單個的陣列預計元素

所以傳遞給model.train(samples, responses)的一個參數需要和標量......但是哪個?

一起來看看KNearest class最新的文檔,讓我們看到了StatsModel.train method的簽名:

virtual bool cv::ml::StatModel::train (InputArray samples, int layout, InputArray responses)

顯然,加入了新的layout說法。但它的meaning是從文檔有點模糊。

如果沒有你的內容的知識文件,如果你需要傳遞ROW_SAMPLECOL_SAMPLE我不能說,但有了這些信息,我能找到一個similar question,其解決辦法是添加cv2.ml.ROW_SAMPLE作爲第二個參數列車方法:

model.train(samples, cv2.ml.ROW_SAMPLE, responses) 
相關問題