fortran的gui开发 python_Python和Fortran注意事项

之前学习python和fortran的时候已经查过很多次相关内容了,有的内容也会添加到网页收藏夹里。但由于我干的事情很杂(也可能是记性不好),查过的东西总是会忘,忘了再查,查了再忘,索性就专门整理一下以备不时之需吧。(不定期更新)

一、python

1、查找import库的位置

python -c "import _geoslib;print(_geoslib)"

二、numpy

1、将数组内nan的值转为0.0

a[np.isnan(a)] = 0.0 # Yes

a[a == np.nan] = 0.0 # No

2、数组内某数的个数和位置

np.sum(a == 1)

np.where(a ==1)

3、将某列中含有某值的行删除

用到了取反~

site_id_from_step1 = site_id_from_step1[~site_id_from_step1.loc[:,2].isin([-1])]

4、删除有nan的行

delete_nan = pd.DataFrame(delete_nan)

delete_nan = delete_nan.dropna(axis=0,how='any') # 删除有nan的行

delete_nan = delete_nan.dropna(axis=0,how='all') # 删除所有列都是nan的行

5、将数组重复n遍

x = np.tile(ec_lon[0], ec_lat.shape[0])

第一个参数是需要被重复的数组,第二个输入参数是重复几遍的几

三、matplotlib

1、contourf(x, y, z, np.arange(np.min(z), np.max(z)+0.01,0.01))中为第四个参数来控制显示范围和间隔

2、如果子图的标题和上一个子图的xlabel重合了

plt.tight_layout()即可

3、涉及到basemap绘图的时候,有时候莫名其妙,figure的外框没了,用常规的方法如:

ax = plt.subplot(111)

ax.spines['top'].set_visible(True)

行不通,那么解决办法是

m.drawparallels(np.arange(0., 52., 0.5), labels=[1,0,0,0], fontsize=20,linewidth=1.0)

重点是linewidth加上就行,当然有时候直接重启Spyder也能解决问题

4、关于plt.hist

count = 50

x = np.random.random(count)

plt.figure()

plt.subplot(511)

plt.plot(np.arange(0,count),x)

plt.subplot(512)

n, bins,patches = plt.hist(x,bins=10)

plt.subplot(513)

plt.bar(np.arange(0,10), n/np.sum(n))

plt.subplot(514)

n2,bins2,patches2 = plt.hist(x,bins=10,normed=1)

plt.subplot(515)

n3,bins3,patches3 = plt.hist(x,bins=10,weights=(100/x.shape[0])*np.ones((count)))

tot = 0

for i in np.arange(0,10):

tot += n2[i] * (bins2[i+1] - bins2[i])

print(tot)

n是每个间隔内数值出现的个数,bins是每个间隔的位置(每个间隔分左右端,bins包含了第一个间隔的左端和最后一个间隔的右端,所以bins.shape[0]=n.shape[0]+1),spatches不用管。

常规得到的是频数分布图,即纵坐标表示每个间隔内数值出现的个数。若想改为频率分布直方图,老版的matplotlib用到了normed,设为True或者非0数即可,得到的结果是n的值与相应间隔的长度相乘结果为1。

若想得到纵坐标是出现的频率,且不需要面积为1(即上述normed=True),那么有两种办法,第一种如plt.subplot(513),即把hist得到的n通过plt.bar重新绘制;第二种方法是利用plt.hist中的weights,如plt.subplot(515)中的设置,即可得到频率单位为%的结果。第二种方法更为简单。

多说一句,如果是以hist的形式来比较两组数据,最好还是使用normed=True即标准化之后的结果。因为,如果不进行标准化,只是呈现原始数据的话,由于两组数据的间隔范围与间隔长度是不同的,所以会导致看上去是不平衡不协调的。

5、关于spines的相关操作:

plt.gca().spines["top"].set_alpha(0.0)

# plt.gca().spines["bottom"].set_alpha(1.2)

plt.gca().spines["right"].set_alpha(0.0)

# plt.gca().spines["left"].set_alpha(1.2)

plt.gca().spines['bottom'].set_linewidth(2.0)

plt.gca().spines['left'].set_linewidth(2.0)

四、Pandas

1、关于DataFrame插入、删除、重命名列[Post_model.py]

2、读入带有日期格式的数据

2.1 、日期和时间分为了两列

2.2 、日期时间格式不是常规格式

3、发现如下错误,可能是文件确实不存在,修改代码过程中,重复使用某个变量,使得原始变量值被覆盖,当然也会出现windows系统把.txt变为了.txt.txt格式(百度时看到的例子)

4、处理如图所示,相对复杂的excel时(以读取温度为例,风场类似[Post_WRF.py]):

data_obs = pd.read_excel(path_obs + name_obs, header=0, index_col=3, parse_dates=True)

data_obs_T2 = data_obs['气温(TMP)'].str.split(',',expand=True)

通过上述两步可得到如下结果(重点是pandas的.str.split命令):

data_obs_T2['zhengfu'] = data_obs_T2[0].str[:1]

data_obs_T2['values'] = data_obs_T2[0].str[1:]

然后得到:

随后用一个for循环遍历整个DF,得到相应的结果,注意str2float直接float()即可,同时还包含有一个UTC2LST的转化:

real_data = np.zeros((data_obs_T2.values.shape[0]))

for i in np.arange(0,data_obs_T2.values.shape[0]):

if data_obs_T2['zhengfu'][i] == '-':

param = -1.0

else:

param = 1.0

tmp1 = float(data_obs_T2['values'][i])

tmp2 = param * tmp1 / 10

real_data[i] = tmp2

data_obs_T2['real values'] = real_data

data_obs_T2 = data_obs_T2['real values']

data_obs_T2_index = data_obs_T2.index

data_obs_T2_index = data_obs_T2_index + pd.Timedelta(hours=8)

data_obs_T2.index = data_obs_T2_index

五、basemap

1、readshapefile[ZYC_flexpart_D20200703_autosave.py]

这个函数的第一个输入参数是路径,第二个是属性名,随便输入啥都可以。此外,如果用这个函数读取别人给你的shp文件发现读取失败时,可能是编码的原因,可添加default_encoding参量

m.readshapefile(file_path_004,'states',default_encoding='gbk')

六、Fortran

1、do循环的等价性

doi = 1, 10

...

...

end dodo10 i = 1, 10

...

...

10 continue

2、Fortran居然有个判断NaN的函数 isnan()

if ( isnan(a) ) then

write(*,*) 'a is NaN'

end if

七、linux

1、vim显示某字符串出现次数

:%s/字符串//ng

2、如果碰到一个巨大的文件想要vim,但是内存不给力咋办

head -n 100000 log.out > log.out_head_100000

tail -n 100000 log.out > log.out_tail_100000

3、关于等号前后要不要空格的问题针对.bashrc,在export变量的时候等号前后不能有空格

针对csh shell脚本,set变量的时候前后一定要有空格

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值