类型错误:只能将length-1数组转换为Python Scalars

The*_*One 3 python opencv opencv3.0

我是openCV的初学者,我正在尝试分析数独求解器的现有代码.这部分代码会引发错误.

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)
Run Code Online (Sandbox Code Playgroud)

错误如下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
Run Code Online (Sandbox Code Playgroud)

知道问题是什么吗?

mem*_*lyk 12

您收到的错误消息:

TypeError: Only length-1 arrays can be converted to Python Scalars
Run Code Online (Sandbox Code Playgroud)

字面上的意思是:您提供的阵列不止一个元件在其中一个地方单一值一单个元件的阵列被预期.

所以传递给调用的一个参数model.train(samples, responses)需要和标量......但是哪个?

查看KNearest类的最新文档,允许我们查看StatsModel.train方法的签名:

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

显然,增加了一个新layout论点.但它的含义在文档中有点模糊.

如果你不知道你文件的内容,我无法判断你是否需要通过ROW_SAMPLE或者COL_SAMPLE,但是在这些信息的帮助下,我可以找到一个类似的问题,其解决方案是将cv2.ml.ROW_SAMPLE第二个参数添加到训练方法中:

model.train(samples, cv2.ml.ROW_SAMPLE, responses) 
Run Code Online (Sandbox Code Playgroud)