重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
python表示圆周率的方法:
为渑池等地区用户提供了全套网页设计制作服务,及渑池网站建设行业解决方案。主营业务为做网站、网站设计、渑池网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
使用“import”语句导入math包。“math.pi”函数可以获取到圆周率,那么就可以用“math.pi”函数来表示圆周率
示例如下:
执行结果如下:
更多Python知识,请关注:Python自学网!!
在很多算法中都会涉及到求向量欧式距离,例如机器学习中的KNN算法,就需要对由训练集A和测试集B中的向量组成的所有有序对(Ai,Bi),求出Ai和Bi的欧式距离。这样的话就会带来一个二重的嵌套循环,在向量集很大时效率不高。
这里介绍如何将这一过程用矩阵运算实现。
假设有两个三维向量集,用矩阵表示:
A=[a11a12a21a22a31a32]
B=⎡⎣⎢⎢b11b12b13b21b22b23b31b32b33⎤⎦⎥⎥
要求A,B两个集合中的元素两两间欧氏距离。
先求出ABT:
ABT=⎡⎣⎢⎢⎢⎢⎢∑k=13ak1bk1∑k=13ak2bk1∑k=13ak1bk2∑k=13ak2bk2∑k=13ak1bk3∑k=13ak2bk3⎤⎦⎥⎥⎥⎥⎥
然后对A和BT分别求其中每个向量的模平方,并扩展为2*3矩阵:
Asq=⎡⎣⎢⎢⎢⎢⎢∑k=13(ak1)2∑k=13(ak2)2∑k=13(ak1)2∑k=13(ak2)2∑k=13(ak1)2∑k=13(ak2)2⎤⎦⎥⎥⎥⎥⎥
Bsq=⎡⎣⎢⎢⎢⎢⎢∑k=13(bk1)2∑k=13(bk1)2∑k=13(bk2)2∑k=13(bk2)2∑k=13(bk3)2∑k=13(bk3)2⎤⎦⎥⎥⎥⎥⎥
然后:
Asq+Bsq−2ABT=⎡⎣⎢⎢⎢⎢⎢∑k=13(ak1−bk1)2∑k=13(ak2−bk1)2∑k=13(ak1−bk2)2∑k=13(ak2−bk2)2∑k=13(ak1−bk3)2∑k=13(ak2−bk3)2⎤⎦⎥⎥⎥⎥⎥
将上面这个矩阵一开平方,就得到了A,B向量集两两间的欧式距离了。
下面是Python实现:
import numpy
def EuclideanDistances(A, B):
BT = B.transpose()
vecProd = A * BT
SqA = A.getA()**2
sumSqA = numpy.matrix(numpy.sum(SqA, axis=1))
sumSqAEx = numpy.tile(sumSqA.transpose(), (1, vecProd.shape[1]))
SqB = B.getA()**2
sumSqB = numpy.sum(SqB, axis=1)
sumSqBEx = numpy.tile(sumSqB, (vecProd.shape[0], 1))
SqED = sumSqBEx + sumSqAEx - 2*vecProd
ED = (SqED.getA())**0.5
return numpy.matrix(ED)
1、点击“开始”——“ArcGIS”——“ArcMap”,启动ArcMap程序,并添加两个点要素类到地图上。
2、点击“ArcToolbox”——“分析工具”——“邻域分析”——“点距离”,打开点距离工具界面。
3、选择输入要素,即作为起点的要素类,可以选择已添加到地图上的要素类,也可以选择外部要素类。
4、选择邻近要素,即作为终点的要素类,可以选择已添加到地图上的要素类,也可以选择外部要素类。
5、选择计算结果的存放位置和表名称。
6、输入搜索半径,即要计算多大半径范围内的邻近点要素之间的距离,可以为空,如果为空,则计算起点到邻近要素类中所有点要素之间的距离。点击“确定”,开始计算起点要素到邻近要素之间的距离。
7、计算完成后,计算结果表会自动添加到地图上,右键点击结果表,点击打开,可以查看计算结果。
最直接的方式当然是用numpy.linalg.norm()来计算
参考:
这里想说的是axis参数问题:
axis为0的时候,对于二维矩阵是计算它的列向量的norm;
axis为1的时候,对于二维矩阵是计算它的行向量的norm。
这也很好理解,毕竟列是第一维,而行是第二维,故顺序如此。
另外还有一个ord参数,定义的是计算什么norm,参数列表如下:
import math
class Dot:
def __init__(self,x,y,z):
self.x=float(x)
self.y=float(y)
self.z=float(z)
t1=input('请输入点t1的坐标:')
t2=input('请输入点t2的坐标:')
t1=eval('[%s]'%t1)
t2=eval('[%s]'%t2)
T1=Dot(t1[0],t1[1],t1[2])
T2=Dot(t2[0],t2[1],t2[2])
print('点t1:',T1.x,T1.y,T1.z)
print('点t2:',T2.x,T2.y,T2.z)
s=math.sqrt((T1.x-T2.x)*(T1.x-T2.x)-(T1.y-T2.y)*(T1.y-T2.y)+(T1.z-T2.z)*(T1.z-T2.z))
print("两点间的距离为:%s"% s)
L2距离就是二范数,用norm试一下。
比如两个1D向量分别为a,b,则欧式距离可以表示为:
norm(a-b), 相当于
sqrt(sum((a-b).^2))