【问题标题】:Type Error: Only length-1 arrays can be converted to Python Scalars类型错误:只有长度为 1 的数组可以转换为 Python 标量
【发布时间】:2016-03-02 17:40:52
【问题描述】:

我是 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

知道问题是什么吗?

【问题讨论】:

  • 你有完整的回溯吗?
  • @memoselyk 我添加了完整的回溯

标签: python opencv opencv3.0


【解决方案1】:

您收到的错误消息:

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 样本,int 布局,InputArray 响应)

显然,添加了一个新的 layout 参数。但它的 meaning 在文档中有点晦涩。

不知道你文件的内容,我不知道你是否需要传递ROW_SAMPLECOL_SAMPLE,但有了这些信息,我可以找到similar question,其解决方案是添加@ 987654330@ 作为 train 方法的第二个参数:

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

【讨论】:

    【解决方案2】:

    由于在最新版本中进行的一系列重构操作而发生错误。 Error fix

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 2013-03-15
      • 1970-01-01
      相关资源
      最近更新 更多