我正在尝试在OpenCV-Python(cv2)中实现"数字识别OCR".它仅用于学习目的.我想在OpenCV中学习KNearest和SVM功能.
我有每个数字的100个样本(即图像).我想和他们一起训练.
letter_recog.pyOpenCV示例附带了一个示例.但我仍然无法弄清楚如何使用它.我不明白什么是样本,响应等.另外,它首先加载一个txt文件,我首先不明白.
稍后搜索一下,我可以在cpp示例中找到一个letter_recognition.data.我使用它并在letter_recog.py模型中为cv2.KNearest创建了一个代码(仅用于测试):
import numpy as np
import cv2
fn = 'letter-recognition.data'
a = np.loadtxt(fn, np.float32, delimiter=',', converters={ 0 : lambda ch : ord(ch)-ord('A') })
samples, responses = a[:,1:], a[:,0]
model = cv2.KNearest()
retval = model.train(samples,responses)
retval, results, neigh_resp, dists = model.find_nearest(samples, k = 10)
print results.ravel()
Run Code Online (Sandbox Code Playgroud)
它给了我一个20000的数组,我不明白它是什么.
问题:
1)letter_recognition.data文件是什么?如何从我自己的数据集构建该文件?
2)什么results.reval()表示?
3)我们如何使用letter_recognition.data文件(KNearest或SVM)编写简单的数字识别工具?
A numpy matrix can be reshaped into a vector using reshape function with parameter -1. But I don't know what -1 means here.
For example:
a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
b = numpy.reshape(a, -1)
Run Code Online (Sandbox Code Playgroud)
The result of b is: matrix([[1, 2, 3, 4, 5, 6, 7, 8]])
有谁知道-1在这里意味着什么?并且似乎python赋予-1几个含义,例如:array[-1]表示最后一个元素.你能解释一下吗?
我目前正在尝试学习Numpy和Python.给出以下数组:
import numpy as np
a = np.array([[1,2],[1,2]])
Run Code Online (Sandbox Code Playgroud)
是否有一个返回维度的函数a(ega是一个2乘2的数组)?
size() 返回4,这没有多大帮助.
各有哪些优缺点?
从我所看到的情况来看,如果需要的话,任何一个都可以作为另一个的替代品,那么我是否应该使用它们或者我应该只坚持其中一个?
该计划的风格会影响我的选择吗?我正在使用numpy做一些机器学习,所以确实有很多矩阵,但也有很多向量(数组).
在Python中,我有一个y
打印为的ndarrayarray([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])
我正在计算这个数组中有多少0s和多少1s.
但是,当我输入y.count(0)或者y.count(1),它说
numpy.ndarray对象没有属性count
我该怎么办?
是否有一种numpy-thonic方式,例如函数,来查找数组中最接近的值?
例:
np.find_nearest( array, value )
Run Code Online (Sandbox Code Playgroud) 如何在第n列中对NumPy中的数组进行排序?
例如,
a = array([[9, 2, 3],
[4, 5, 6],
[7, 0, 5]])
Run Code Online (Sandbox Code Playgroud)
我想按第二列对行进行排序,以便我回来:
array([[7, 0, 5],
[9, 2, 3],
[4, 5, 6]])
Run Code Online (Sandbox Code Playgroud) 我很好奇,是否有任何方式打印格式化numpy.arrays,例如,以类似于这样的方式:
x = 1.23456
print '%.3f' % x
Run Code Online (Sandbox Code Playgroud)
如果我想打印numpy.array浮点数,它会打印几个小数,通常采用"科学"格式,即使对于低维数组也很难读取.但是,numpy.array显然必须打印成一个字符串,即用%s.这有解决方案吗?
在numpy某些操作中,有些操作会返回,(R, 1)但有些操作会返回(R,).这将使矩阵乘法更加繁琐,因为reshape需要显式.例如,给定一个矩阵M,如果我们想要做的行数numpy.dot(M[:,0], numpy.ones((1, R)))在哪里R(当然,同样的问题也会出现在列中).我们会得到matrices are not aligned错误,因为M[:,0]是在外形(R,),但numpy.ones((1, R))在形状(1, R).
所以我的问题是:
形状(R, 1)和形状有什么区别(R,).我知道字面上它是数字列表和列表列表,其中所有列表只包含一个数字.只是想知道为什么不设计numpy使它有利于形状(R, 1)而不是(R,)更容易的矩阵乘法.
上面的例子有更好的方法吗?没有明确重塑像这样:numpy.dot(M[:,0].reshape(R, 1), numpy.ones((1, R)))
我无法弄清楚如何使用我通常使用列表的方式使用数组或矩阵.我想创建一个空数组(或矩阵),然后一次添加一列(或行).
目前,我能找到的唯一方法就是:
mat = None
for col in columns:
if mat is None:
mat = col
else:
mat = hstack((mat, col))
Run Code Online (Sandbox Code Playgroud)
如果它是一个列表,我会做这样的事情:
list = []
for item in data:
list.append(item)
Run Code Online (Sandbox Code Playgroud)
有没有办法为NumPy数组或矩阵使用这种表示法?
numpy ×10
python ×10
arrays ×4
matrix ×2
count ×1
dimensions ×1
ocr ×1
opencv ×1
pretty-print ×1
python-2.x ×1
scipy ×1
search ×1
sorting ×1