only size-1 arrays can be converted to Python scalars

Posted 夏日已末

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了only size-1 arrays can be converted to Python scalars相关的知识,希望对你有一定的参考价值。

python版本:3.6.5

opencv版本:3.2.0

使用的jupyter notebook

源码如下:

import cv2
import numpy as np
import matplotlib.pyplot as plt


%matplotlib inline

# Feature set containing (x,y) values of 25 known/training data
trainData = np.random.randint(0,100,(25,2)).astype(np.float32)

# Labels each one either Red or Blue with numbers 0 and 1
responses = np.random.randint(0,2,(25,1)).astype(np.float32)

# Take Red families and plot them
red = trainData[responses.ravel()==0]
plt.scatter(red[:,0],red[:,1],80,r,^)

# Take Blue families and plot them
blue = trainData[responses.ravel()==1]
plt.scatter(blue[:,0],blue[:,1],80,b,s)

# plt.show()

newcomer = np.random.randint(0,100,(1,2)).astype(np.float32)
plt.scatter(newcomer[:,0],newcomer[:,1],80,g,o)

knn = cv2.ml.KNearest_create()

knn.train(trainData,responses)
ret, results, neighbours ,dist = knn.findNearest(newcomer, 3)


print ("result: ", results,"
")
print ("neighbours: ", neighbours,"
")
print ("distance: ", dist)

plt.show()

错误如下:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-b1c5cdca5e57> in <module>()
     20 knn = cv2.ml.KNearest_create()
     21 
---> 22 knn.train(trainData,responses)
     23 ret, results, neighbours ,dist = knn.findNearest(newcomer, 3)
     24 

TypeError: only size-1 arrays can be converted to Python scalars

错误原因:

传递的参数错误

train函数中第二个参数应该是数组的布局方式

应该根据传入数组的形式填cv2.ml.ROW_SAMPLE或者cv2.ml.COL_SAMPLE

例如我的就是

knn.train(trainData,cv2.ml.ROW_SAMPLE,responses)

参考地址:https://stackoverflow.com/questions/33975695/type-error-only-length-1-arrays-can-be-converted-to-python-scalars

 

以上是关于only size-1 arrays can be converted to Python scalars的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: only integer scalar arrays can be converted to a scalar index

解决问题:only integer scalar arrays can be converted to a scalar index

TypeError: only integer scalar arrays can be converted to a scalar index

python报错:only integer scalar arrays can be converted to a scalar index

Error: Finish can only be called once

Error: CompareBaseObjectsInternal can only be called from the main thread