if t==0: dir=dir1 elif t==1: dir=dir2 else: dir=dir3
# 开辟O(n^4)权重矩阵 # 这玩意很耗内存,所以可以考虑用局部计算代替全局计算 a = [[] for _ inrange(n*m)] a_weight=0 for i inrange(n): for j inrange(m): # 找到他在二维上的临界点 loc=i*m+j for detX, detY indir: x = i + detX y = j + detY # 转化为一维 # 边界处理 if0 <= x < n and0 <= y < m: a[loc].append([x,y,val]) a_weight+=val
defmoranIndex(data,weight): # 莫兰指数计算 # s_0=np.sum(np.sum(weight)) s_0=a_weight n,m=len(data),len(data[0]) x_hat=np.mean(data) up_sum=0 down_sum=0 for i inrange(n): for j inrange(m): # 下一轮 loc=i*m+j for v in weight[loc]: up_sum+=v[2]*(data[i][j]-x_hat)*(data[v[0]][v[1]]-x_hat) down_sum+=(data[i][j]-x_hat)**2 return (n*m/s_0)*(up_sum/down_sum)
defGeary_C(data,weight): # Geary's C计算 s_0=a_weight*2 n, m = len(data), len(data[0]) x_hat = np.mean(data) up_sum = 0 down_sum = 0 for i inrange(n): for j inrange(m): # 下一轮 loc = i * m + j for v in weight[loc]:
# 逐年绘制 path=r"\yourpath" timeList=[] for i inrange(len(List)): lis=List[i] plt.figure(figsize=(20,6)) plt.plot(range(12),lis,'r-') Mean=sum(lis)/12 plt.plot(range(12),[Mean]*12,'b',linestyle='--',alpha=0.2) plt.title("%s年"%(i+1990)) plt.xticks(range(12),["%s月"%(m+1) for m inrange(12)]) plt.savefig((val:=path+"\\"+"%s.png"%i),dpi=200) timeList.append(val)
接着就是正常的绘制,我们需要将图像存储下来,并记录存储位置。
通过imageio模块制作动图。
1 2 3 4 5 6
IMG=[] import imageio path=r"C:\Users\lenovo\Desktop\Ocean\Spatial" for i in timeList: IMG.append(imageio.imread(i)) imageio.mimsave(path+"\\"+"GIF1.gif",IMG,"GIF",duration=1)