python学习笔记
Numpy
切片
选择均匀间隔的元素/选择奇数偶数列
x = numpy.array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[6, 7, 8, 9, 10]])
#间隔三行取行数组
a=x[::4]
#a= [[1 2 3 4 5]
# [6 7 8 9 10]]
#间隔三列取列数组
b=a[:,::4]
# b = [[1 5]
# [6 10]]
忽略0
a = numpy.array([0,1,2,0,2,3,4])
b = a[numpy.nonzero(a)]
where & mask
mask = np.where( (array_xya[:,1]> array_xya[:,1].max()-200 ) & (array_xya[:,0]>0.6) )
array = array_xya[mask]
#数组长度:array.shape[0]
np.array_split()与np.split()
np.array_split()可以进行不均等的划分,而np.split()只能进行均等划分。
import numpy as np
x = np.arange(8.0)
print np.array_split(x,3)
#输出:不均等划分结果
[array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7.])]
print np.split(x,3)
#报错:一旦不均等就会报错
'array split does not result in an equal division')
ValueError: array split does not result in an equal division
求导,曲率计算
dx= np.gradient(x)
dy = np.gradient(y)
d2x = np.gradient(dx)
d2y = np.gradient(dy)
curvature = (np.abs(dx * d2y - d2x * dy) / (dx * dx + dy * dy)**1.5)*1000
文件读取
rasterio
import rasterio
Raster= "C:\\Users\\a\\Downloads\\2015.tif" #多波段tif
with rasterio.open(Raster) as src:
array = src.read()
array1 = array[0,::] #第一个波段
读取文件夹下的子文件夹里的文件
import os
def get_filelist(dir):
Filelist = []
for home, dirs, files in os.walk(input_folder):
for filename in files:
# 文件名列表,包含完整路径
Filelist.append(os.path.join(home, filename))
# # 文件名列表,只包含文件名
# Filelist.append( filename)
return Filelist
if __name__ == "__main__":
input_folder = '....'
file_list = get_filelist(input_folder)
平滑+拟合
loess平滑
f =0.35
yest = lowess_ag(x, y, f=f, iter=4)#拟合的y值
高斯拟合
H, A, x0, sigma = gauss_fit(x, y) #拟合的公式
# GaussLine = sigma*2.58+x0
GaussLine = sigma*1.96+x0
Matplotlib
plt.scatter(array[:,1],array[:,0],color='red', marker='.',label='original values')
if line!=-9999:
plt.plot([line,line],[0,0.8],color = 'blue')
plt.xlabel('dem')
plt.ylabel('ndvi')
plt.title('line')
plt.legend(loc=3)
plt.show()