类型错误:只有length-1数组可以转换为Python标量

2024-05-17 21:00:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个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)

错误如下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

有什么问题吗?


Tags: 代码datamodel错误nptrainberesponses
2条回答

由于在最新版本中执行了一系列重构操作,因此发生错误。 Error fix

收到的错误消息:

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 )

显然,添加了一个新的参数。但是meaning在文档中有点模糊。

如果不知道你文件的内容,我无法判断你是否需要传递ROW_SAMPLECOL_SAMPLE,但是有了这些信息,我可以找到一个similar question,其解决方案是将cv2.ml.ROW_SAMPLE添加为train方法的第二个参数:

model.train(samples, cv2.ml.ROW_SAMPLE, responses) 

相关问题 更多 >