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

only size-1 arrays can be converted to Python scalars

Python version: 3.6.5

Opencv version: 3.2.0

Jupyter notebook used

The source code is as follows:

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,"\n")
print ("neighbours: ", neighbours,"\n")
print ("distance: ", dist)

plt.show()

The error is as follows:

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

Error reason:

Wrong parameter passed

The second parameter in the train function should be the layout of the array

Cv2.ml.row should be filled in according to the form of the passed in array_ Sample or cv2.ml.col_ SAMPLE

For example, mine is

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