- empty grid --> 往往是time step出错,比如时间没有算对,或者time step不足。
- 经度上,网格与grads自带的mask不符合 --> 说明control file的longitude起始点写错了,不符合数据文件的起始点顺序,这时候需要修改control file的XDEF这一项的起始点。
- 1st column 不能读 --> 主要是因为数据文件是思维的,还有z level这一维度,var (t,z,y,x),所以在VAR这一项,不能写成 varname 0 99 varname这种三维的模式了。要写成varname=>varname 0 t,z,y,x longname,0表示虽然是z的函数,但z只有一个level,就是surface level,所以是0。
- 阅读netcdf 文件的时候,建议使用ctl file去读,option这一项写着netcdf。阅读binary 文件的时候,如果option这一项还写着netcdf,则会报错。
- const(var, value, -u)这个函数,每次使用时要注意value这个值,要和undef相匹配。
- 通过cdo生成netcdf文件的control file,基于它再进行修改,相对自己从头开始写control file比,不容易出错。
Pages
▼
Tuesday, April 17, 2018
[GrADS] ctl文件报错提醒
没有什么做不到
转眼间韩国大哥生了第三个孩子,意大利大哥也有了他的第一个孩子,体奥博士答辩了,师兄们都纷纷找到了教职,而我还尝试在一堆散沙中寻找一丝规律,看到我的未来。
我不要害怕过去,要从过去的经验中吸取教训,避免错误的发生。只要真正意识到了自己的错误和问题,认真对待,没有什么做不到。
借用文章里的几句话,给自己提个醒:
我不要害怕过去,要从过去的经验中吸取教训,避免错误的发生。只要真正意识到了自己的错误和问题,认真对待,没有什么做不到。
借用文章里的几句话,给自己提个醒:
人生的幸福,我的感觉来自独立思考的能力、自律(控制住自己的欲望)、保持对新事物的敏感度和参与度。
- 比选择未来方向更重要的是一个人独立思考的能力,自己纠错、自己拯救自己的能力,自己找方向的能力。我直到今天一直在自己做决策,都是自己研究琢磨,我也有问人的时候,但是我从来不问人生该怎么选择,我只问具体的技术性问题。
- 保持对物欲的控制,管理好自己,培养良好的习惯,我们可以摆脱很多不必要的的麻烦。
- 保持年轻的状态是对新生技术的敏感,这才是真正保持年轻的秘诀。
如何找、读文献?
关于找文献(from GKY)
1,泛读:比如,和我的研究相关的有二十几种杂志(这些也是我自己可能会投的杂志
),我在这些杂志的网站上都注册,叫杂志每发一新期时都自动给我发个email,里面有
这一期所有文章的 links. 我几乎每天都会收到这样的 emails.不管多忙,我都会花几
分钟把所有文章的 title and abstract看一遍。这些文章多数跟我做的是没关系的,
但有助于我了解整个领域的发展动态。有个别是我感兴趣和相关的,那我就得仔细读了。
2,精读:你做的topic,要时不时在 pubmed上搜索一下(当然,通过上面的泛读,也能
找到这些文章,但有时会有漏掉的)。这其中你认为重要的,要仔细读,反复读。
3,根据综述读:如果你要了解一个你不太熟悉的领域,最好的办法就是找一篇好的最
近的相关综述,并从中展开去读。
4,上面三种都是很常用的读文献的方法,下面这种是我认为很重要,但不太常用的,
就是根据作者读:比如我在刚做博后时,集中把我博后导师过去所有的文章读了一篇。
我事业上的idol, role models的历年的所有文章(或至少是主要文章)我都要集中读
。这样的好处是可以非常系统地学习这些人是怎么做science的,从中领悟別人是怎么
成功的。这就好比刚入行时,李克勤会去买谭咏麟的所有唱片,科比会去观摩乔丹的所
有比赛录像,他们仔细揣摩并模仿自己的偶像是怎么唱歌和打球的,并结合自已的特点
,最终形成自己的风格。
5,如果你有朝一日能作上PI,你可以适当减少精读,并把这一部分转给手下,让他们
去管理这些细节部分,而着重去培养自己的 vision和big picture, (高瞻远瞩的能力
)这对你怎么引领自己实验室发展至关重要。我经常会把一些宗师们写的最经典的最好
的textbooks从头到尾读一篇(而不是只读自已熟悉或有兴趣的章节。这些书和平时所
说的综述或网上的Wiki不一样,字里行间透露着大师们思考科学问题的方式。你要仔细
过去我总是在google scholar上找关键词,效果非常不好。
不要问我为什么在上完数据库检索这门课之后居然只会这一招。我也很悔恨。
现在发现,读一篇review,然后跟着里头的参考文献顺藤摸瓜,效果更好。
快读paper的秘诀是,不要全读。
这个感觉很简单,但是境界就在于你知道哪些东西不需要读。
其实我脑子里掌握了一个很好的记笔记的方法,那就是note flow 笔记流,但就是从来没有用过。
我建议在草稿本上画笔记流。
关于做笔记(from Xu, 我认为这一技巧利于引用):
我intensive reading的时候就会用两三句话总结一下每篇paper。包括这篇paper和其他paper的联系,还有我为什么觉得这篇paper有意思,还有我觉得我可能会因为什么而cite这篇paper。
),我在这些杂志的网站上都注册,叫杂志每发一新期时都自动给我发个email,里面有
这一期所有文章的 links. 我几乎每天都会收到这样的 emails.不管多忙,我都会花几
分钟把所有文章的 title and abstract看一遍。这些文章多数跟我做的是没关系的,
但有助于我了解整个领域的发展动态。有个别是我感兴趣和相关的,那我就得仔细读了。
2,精读:你做的topic,要时不时在 pubmed上搜索一下(当然,通过上面的泛读,也能
找到这些文章,但有时会有漏掉的)。这其中你认为重要的,要仔细读,反复读。
3,根据综述读:如果你要了解一个你不太熟悉的领域,最好的办法就是找一篇好的最
近的相关综述,并从中展开去读。
4,上面三种都是很常用的读文献的方法,下面这种是我认为很重要,但不太常用的,
就是根据作者读:比如我在刚做博后时,集中把我博后导师过去所有的文章读了一篇。
我事业上的idol, role models的历年的所有文章(或至少是主要文章)我都要集中读
。这样的好处是可以非常系统地学习这些人是怎么做science的,从中领悟別人是怎么
成功的。这就好比刚入行时,李克勤会去买谭咏麟的所有唱片,科比会去观摩乔丹的所
有比赛录像,他们仔细揣摩并模仿自己的偶像是怎么唱歌和打球的,并结合自已的特点
,最终形成自己的风格。
5,如果你有朝一日能作上PI,你可以适当减少精读,并把这一部分转给手下,让他们
去管理这些细节部分,而着重去培养自己的 vision和big picture, (高瞻远瞩的能力
)这对你怎么引领自己实验室发展至关重要。我经常会把一些宗师们写的最经典的最好
的textbooks从头到尾读一篇(而不是只读自已熟悉或有兴趣的章节。这些书和平时所
说的综述或网上的Wiki不一样,字里行间透露着大师们思考科学问题的方式。你要仔细
琢磨这些人是怎么思考问题的。还有就是读些哲理方面的书,有空多思考些哲学问题。
过去我总是在google scholar上找关键词,效果非常不好。
不要问我为什么在上完数据库检索这门课之后居然只会这一招。我也很悔恨。
现在发现,读一篇review,然后跟着里头的参考文献顺藤摸瓜,效果更好。
快读paper的秘诀是,不要全读。
这个感觉很简单,但是境界就在于你知道哪些东西不需要读。
其实我脑子里掌握了一个很好的记笔记的方法,那就是note flow 笔记流,但就是从来没有用过。
我建议在草稿本上画笔记流。
关于做笔记(from Xu, 我认为这一技巧利于引用):
我intensive reading的时候就会用两三句话总结一下每篇paper。包括这篇paper和其他paper的联系,还有我为什么觉得这篇paper有意思,还有我觉得我可能会因为什么而cite这篇paper。
[Linux] Files permission
A command to change the permissions of a directory so that others can not see it.
$ Chmod -R 700 /directory
$ Chmod -R 700 /directory
Friday, April 13, 2018
[Python] read bil.zip file in python
The bil file is a widely-used GIS format, which can be read through gdal library in python.
GDAL installation
Although I have installed gdal in python before, recently I have a problem running gdal library in anaconda python. The error is gdal.so.20 does not exist. The work-around is as below from a stack exchange GIS forum:
In anaconda, uninstall the previous gdal library by
$ conda uninstall gdal
And then reinstall the libgdal before installing gdal
$ conda install libgdal
$ conda install gdal
Test if you can import the gdal library in python:
>> import gdal, gdalconst
Read zip file
Before reading the bil file, we need to use a package "vsizip" to unzip the zip-file. First, change the directory to the data folder, and then modify the filename with vsizip
>> os.chdir('path/to/file')
>> filename = '/vsizip/the_name_of_the_file.zip/the_name_of_the_file.bil'
This used to work but now it returns the error as:
Recode from CP437 to UTF-8 failed with the error: "Invalid argument"
The work-around is as below from github:
set the environmental variable
export CPL_ZIP_ENCODING=UTF-8
Read bil file
After successfully decode the zip file, one can read the file using the modified filename.
>> gdal.GetDriverByName('EHdr').Register()
>> img = gdal.Open(filename, gdalconst.GA_ReadOnly)
>> band = img.GetRasterBand(1)
>> data = band.ReadAsArray()
GDAL installation
Although I have installed gdal in python before, recently I have a problem running gdal library in anaconda python. The error is gdal.so.20 does not exist. The work-around is as below from a stack exchange GIS forum:
In anaconda, uninstall the previous gdal library by
$ conda uninstall gdal
And then reinstall the libgdal before installing gdal
$ conda install libgdal
$ conda install gdal
Test if you can import the gdal library in python:
>> import gdal, gdalconst
Read zip file
Before reading the bil file, we need to use a package "vsizip" to unzip the zip-file. First, change the directory to the data folder, and then modify the filename with vsizip
>> os.chdir('path/to/file')
>> filename = '/vsizip/the_name_of_the_file.zip/the_name_of_the_file.bil'
This used to work but now it returns the error as:
Recode from CP437 to UTF-8 failed with the error: "Invalid argument"
The work-around is as below from github:
set the environmental variable
export CPL_ZIP_ENCODING=UTF-8
Read bil file
After successfully decode the zip file, one can read the file using the modified filename.
>> gdal.GetDriverByName('EHdr').Register()
>> img = gdal.Open(filename, gdalconst.GA_ReadOnly)
>> band = img.GetRasterBand(1)
>> data = band.ReadAsArray()
Saturday, April 7, 2018
4月文献速读
- Two distinct influences of Arctic warming on cold winters over North America and East Asia (2015)
- 北极的升温对中纬度地区的气候有着深远影响:北极的升温促进了异常反气旋和中温度西风槽的发展,带来极寒的冷空气。
- Reduced North American terrestrial primary productivity linked to anomalous Arctic warming (2017)
- 北极的升温导致了北美和东亚的极端寒潮事件,而这些北方的低温和南方的少雨使得美国的GPP下降
- Rainforest-initiated wet season onset over the southern Amazon (2017)
- 干季的蒸发能够产生一些云的条件。
Wednesday, February 7, 2018
[Python] How to shift the midpoint of the colorbar? -Normalizing colormap
给网格数据画图的时候,常常面临选择合适调色盘的难题。我们常用的matplotlib里自带的调色盘大致有三种:单向渐变,双向渐变,多色渐变。根据数据的值域以及目的,我们来选择不同的调色盘来表现。
单向渐变多用于单增的信号,且空间分布非常简单。复杂的空间分布应该采用多色渐变,区分度更大,比如地形图。
双向渐变常用于有正负值的数据,比如相关系数、敏感性等等。今天就是要来讲一讲双向渐变colorbar。
我们平时经常遇到这样的数据,就是正负值不对称,比如值域范围是-1~100。为了能够使用双向渐变colorbar,我们需要调整数据中点,不然调色盘不对称,造成读数的困难!一个暴力的方法就是通过人为设定最大、最小值来设定数据中点:
plt.imshow(data, vmin=-100, vmax=100)
下面介绍一个更加合理、不浪费空间的简便方法:
单向渐变多用于单增的信号,且空间分布非常简单。复杂的空间分布应该采用多色渐变,区分度更大,比如地形图。
双向渐变常用于有正负值的数据,比如相关系数、敏感性等等。今天就是要来讲一讲双向渐变colorbar。
我们平时经常遇到这样的数据,就是正负值不对称,比如值域范围是-1~100。为了能够使用双向渐变colorbar,我们需要调整数据中点,不然调色盘不对称,造成读数的困难!一个暴力的方法就是通过人为设定最大、最小值来设定数据中点:
plt.imshow(data, vmin=-100, vmax=100)
下面介绍一个更加合理、不浪费空间的简便方法:
from matplotlib.colors import Normalize
class MidpointNormalize(Normalize):
def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
self.midpoint = midpoint
Normalize.__init__(self, vmin, vmax, clip)
def __call__(self, value, clip=None):
# I'm ignoring masked values and all kinds of edge cases to make a
# simple example...
x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
return np.ma.masked_array(np.interp(value, x, y))
data = np.random.random((10,10))
data = 10 * (data - 0.8)
fig, ax = plt.subplots()
norm = MidpointNormalize(midpoint=0)
im = ax.imshow(data, norm=norm, cmap=plt.cm.bwr, interpolation='none')
fig.colorbar(im)
plt.show()
是不是很简单呀?原作者Joe还有好几种其他方法,以后可以试验一下。