2015-11-28 2 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_SAMPLE или COL_SAMPLE, но вооружившись этой информацией, я мог бы найти similar question, решение которой должно было добавить cv2.ml.ROW_SAMPLE в качестве второго аргумента поезда метод:

model.train(samples, cv2.ml.ROW_SAMPLE, responses) 
Смежные вопросы

 Смежные вопросы