从kmeans中学到的编程技巧
1.random
在python3中,numpy中的一些随机方法
random.random_sample() # 产生0-1之间的随机数
random.rand(3,1) # 产生3行1列的随机数,随机数的大小是0-1
2.min和max
A = mat(array([[1,3], [5, 6]])) print(min(A[:, 1])) print(min(A[:, 1])[0, 0]) ------------------------------------- 结果: [[3]] 3
对矩阵进行min和max之后所得到的数据,还是矩阵。若是想获得矩阵内的数据,就要用取矩阵元素的方法
3.map
在python3.0中,使用map将生产map对象,需要使用list,才可以获得真实的元素值列表
4.tolist()
可将矩阵转化为list,使用函数tolist(),此时所得到的列表是二维的。即元素是一个列表。那么,A.tolist()[0],就是获取矩阵A的第一行元素,构成一维list
5.add_axes
在figure()上面添加新的区域,使用add_axes,代码所示:
# 测试add_axes import matplotlib import matplotlib.pyplot as plt flg = plt.figure() rect = [0.1, 0.1, 0.8, 0.8] # 0.1为x轴,0.1位y轴的起点,分别是figure的10%的宽和高,即x和y,而0.8和0.8分别为figure的80%的宽和高 X = [4,5,8,14,25,36] y = [2,4,6,7,9,13] ax = flg.add_axes(rect, projection='polar', label='ax0') # projection表示坐标系 ax.plot(X, y, 'r') ax.set_title('ax') ax1 = flg.add_axes([0.0, 0.0, 0.4, 0.4], frameon=False, label='ax1') # 这里的0.0、0.4都是针对整个figure而言的
# frameon表示是否覆盖下面的图层
ax1.plot(X, y, 'b') ax1.set_title('ax1') plt.show()
效果图为:
需要深入理解add_axes的含义,若是想在制作坐标时,去掉x轴和y轴的刻度,就可以在使用xticks=[]和yticks=[],在axes初始化传入,即可。代码如下:
axprops = dict(xticks=[], yticks=[]) # 表示不需要x和y的刻度,因为该刻度里面没有数据啊,所以就没有数据啦, # 不添加的就按数据的大小,自动生成刻度 ax0=fig.add_axes(rect, label='ax0', **axprops) # label为了标识不同的坐标系(axes)
在导入地图和对应的经纬度时,需要将坐标系的大小,设定为同一个大小,如:rect = [0.1, 0.1, 0.8, 0.8]。这样图片和位置才可以一一对应起来。
注意:不同的坐标系,需要有不同的label标签,因为figure里面存放的坐标系是通过label进行检索的
6.球面距离公式
利用余弦定理和球面上两点的最短距离,可以推导出球面公式。推导过程可参考:球面推导过程
余弦定理:
球面距离公式:S=R·arc cos[cosβ1cosβ2cos(α1-α2) + sinβ1sinβ2],其中:假设所求点A ,纬度角β1 ,经度角α1 ;点B ,纬度角β2 ,经度角α2
注意:需要能够推导余弦定理和球面公式,或者有思路