重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
先来看一下 math 模块中包含内容,如下所示:
金门网站建设公司创新互联建站,金门网站设计制作,有大型网站制作公司丰富经验。已为金门1000多家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的金门做网站的公司定做!
接下来具体看一下该模块的常用函数和常量。
ceil(x)
返回 x 的上限,即大于或者等于 x 的最小整数。看下示例:
floor(x)
返回 x 的向下取整,小于或等于 x 的最大整数。看下示例:
fabs(x)
返回 x 的绝对值。看下示例:
fmod(x, y)
返回 x/y 的余数,值为浮点数。看下示例:
factorial(x)
返回 x 的阶乘,如果 x 不是整数或为负数时则将引发 ValueError。看下示例:
pow(x, y)
返回 x 的 y 次幂。看下示例:
fsum(iterable)
返回迭代器中所有元素的和。看下示例:
gcd(x, y)
返回整数 x 和 y 的最大公约数。看下示例:
sqrt(x)
返回 x 的平方根。看下示例:
trunc(x)
返回 x 的整数部分。看下示例:
exp(x)
返回 e 的 x 次幂。看下示例:
log(x[, base])
返回 x 的对数,底数默认为 e。看下示例:
常量
tan(x)
返回 x 弧度的正切值。看下示例:
atan(x)
返回 x 的反正切值。看下示例:
sin(x)
返回 x 弧度的正弦值。看下示例:
asin(x)
返回 x 的反正弦值。看下示例:
cos(x)
返回 x 弧度的余弦值。看下示例:
acos(x)
返回 x 的反余弦值。看下示例:
decimal 模块为正确舍入十进制浮点运算提供了支持,相比内置的浮点类型 float,它能更加精确的控制精度,能够为精度要求较高的金融等领域提供支持。
decimal 在一个独立的 context 下工作,可以使用 getcontext() 查看当前上下文,如下所示:
从上面的结果中我们可以看到 prec=28,这就是默认的精度,我们可以使用 getcontext().prec = xxx 来重新设置精度。接下来通过具体示例看一下。
基本运算
执行结果:
上面结果是用了默认精度,我们重新设置下精度再来看一下:
执行结果:
random 模块可以生成随机数,我们来看一下其常用函数。
random()
返回 [0.0, 1.0) 范围内的一个随机浮点数。看下示例:
uniform(a, b)
返回 [a, b) 范围内的一个随机浮点数。看下示例:
randint(a, b)
返回 [a, b] 范围内的一个随机整数。看下示例:
randrange(start, stop[, step])
返回 [start, stop) 范围内步长为 step 的一个随机整数。看下示例:
choice(seq)
从非空序列 seq 返回一个随机元素。 看下示例:
shuffle(x[, random])
将序列 x 随机打乱位置。看下示例:
sample(population, k)
返回从总体序列或集合中选择的唯一元素的 k 长度列表,用于无重复的随机抽样。看下示例:
参考:
OpenCV曲线拟合与圆拟合
使用OpenCV做图像处理与分析的时候,经常会遇到需要进行曲线拟合与圆拟合的场景,很多OpenCV开发者对此却是一筹莫展,其实OpenCV中是有现成的函数来实现圆拟合与直线拟合的,而且还会告诉你拟合的圆的半径是多少,简直是超级方便,另外一个常用到的场景就是曲线拟合,常见的是基于多项式拟合,可以根据设定的多项式幂次生成多项式方程,然后根据方程进行一系列的点生成,形成完整的曲线,这个车道线检测,轮廓曲线拟合等场景下特别有用。下面就通过两个简单的例子来分别学习一下曲线拟合与圆拟合的应用。
一:曲线拟合与应用
基于Numpy包的polyfit函数实现,其支持的三个参数分别是x点集合、y点集合,以及多项式的幂次。得到多项式方程以后,就可以完整拟合曲线,图中有如下四个点:

调用polyfit生成的二阶多项式如下:

拟合结果如下:

使用三阶多项式拟合,调用polyfit生成的多项式方程如下:

生成的拟合曲线如下:

使用polyfit进行曲线拟合时候需要注意的是,多项式的幂次最大是数据点数目N - 1幂次多项式,比如有4个点,最多生成3阶多项式拟合。上述演示的完整代码实现如下:
def circle_fitness_demo():
image = np.zeros((400, 400, 3), dtype=np.uint8)
x = np.array([30, 50, 100, 120])
y = np.array([100, 150, 240, 200])
for i in range(len(x)):
cv.circle(image, (x[i], y[i]), 3, (255, 0, 0), -1, 8, 0)
cv.imwrite("D:/curve.png", image)
poly = np.poly1d(np.polyfit(x, y, 3))
print(poly)
for t in range(30, 250, 1):
y_ = np.int(poly(t))
cv.circle(image, (t, y_), 1, (0, 0, 255), 1, 8, 0)
cv.imshow("fit curve", image)
cv.imwrite("D:/fitcurve.png", image)
二:圆拟合与应用
圆的拟合是基于轮廓发现的结果,对发现的近似圆的轮廓,通过圆拟合可以得到比较好的显示效果,轮廓发现与拟合的API分别为findContours与fitEllipse,
有图像如下:

使用轮廓发现与圆拟合处理结果如下:

红色表示拟合的圆,蓝色是圆的中心位置
上述完整的演示代码如下:
def circle_fitness_demo():
src = cv.imread("D:/javaopencv/c2.png")
cv.imshow("input", src)
src = cv.GaussianBlur(src, (3, 3), 0)
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
cv.imshow("binary", binary)
image, contours, hierachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
for i in range(len(contours)):
rrt = cv.fitEllipse(contours[i])
cv.ellipse(src, rrt, (0, 0, 255), 2, cv.LINE_AA)
x, y = rrt[0]
cv.circle(src, (np.int(x), np.int(y)), 4, (255, 0, 0), -1, 8, 0)
cv.imshow("fit circle", src)
cv.imwrite("D:/fitcircle.png", src)
吾心信其可行,则移山填海之难,终有成功之日;
吾心信其不可行,则反掌折枝之易,亦无收效之期也
方法如下:
①使用numpy等第三方库,可以提高到64bit的精度。
②使用高精度运算库。
③使用mathematica,高精度计算就赶紧用专业的数学软件。
round函数python:
这个函数相当于调去里面的一个函数,有一个数组,从中里面调取一个数据。简单的说,round是使用四舍五入对小数进行位数控制的函数,round(a,b),a参数是小数,b是小数点后保留的位数。实际使用需要考虑的python2和python3版本的差异与小数精度的问题。
ound函数的使用用法
根据Excel的帮助得知,round函数就是返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。
round函数的语法是:ROUND(number,num_digits),即:Round(数值,保留的小数位数)
Number:需要进行四舍五入的数字。
Num_digits:指定的位数,按此位数进行四舍五入。
其中,如果num_digits大于0,则四舍五入到指定的小数位。
如果num_digits等于0,则四舍五入到最接近的整数。
如果num_digits小于0,则在小数点左侧进行四舍五入。