使用Python对二维数据进行插值

背景

因为一个程序中需要保存的数据太大,所以需要进行采样,保存稀疏网格上的值。在计算完成后,返回原来密集网格上的值。本来使用的是Scipy.interpolate.griddate,效率十分低。

后来查阅相关文档,发现Scipy提供了两种插值模式,分别对应矩形网格和非结构网格,前者效率更高。而对于我的问题,结构网格完全适用。

閱讀全文

Mac下正常运行GoagentX

据说,Goagent要停了,趁着目前还能用赶紧用吧,以后可能换成VPN了。现在Mac OSX下,GoagentX是最好的选择,它内嵌了Goagent,支持自动切换。 但是它也很长时间没有更新了,不支持最新版本的Goagent,所以现在有点问题,目前可以通过更改iplist的方式仍然使用。

下载checkgoogleip

又是一个好心人提供的工具,特别适合我这样的无脑人士。这里是下载地址,它是用来检查哪些IP可以用在goagent上面。

下载完成后,执行:

1
$ python checkip.py

它就会自动开始检测IP,你随时可以利用Ctrl c停掉,然后它会把可以使用的IP按照ping值进行排序,保存到ip_tmpok.txt。打开后,可以看到很多地址,后面跟着对应的ping值,我们可以挑ping相对小的前几行。

更改iplist

首先,要找到这个配置文件,我当初也是找了好久,这里就直接给出了

1
2
$ cd /Applications/GoAgentX.app/Contents/PlugIns/goagent.gxbundle/Contents/Resources/bin/local
$ vi proxy.ini

找到[iplist]google_hk这一行,删掉原来的地址,修改成之前得到的ping值小的地址,例如,我目前在用的:

1
2
3
[iplist]
google_cn = www.google.cn|www.g.cn
google_hk = 218.189.25.167|218.189.25.181|173.194.117.69|210.153.73.24|106.162.216.114

google_cn是没有用的,为什么呢?因为它已经出局了-_-!

最后提醒下,要记得经常更新IP哦,也许它很快就被封了

模板的声明和定义能否分离

这个问题是我在做《C++ Primer, 5th》上的一个习题时遇到的。我当时把template
的声明放在了.h文件中,而把成员函数的定义放在.cc文件中,结果在编译链接时
一直报错:

1
2
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我原本以为是g++的链接出了问题,后来google发现原来是template的定义和声明
必须都放在.h头文件中。接下来会详细说一下这个问题。

参考文献:

閱讀全文

左值 vs 右值

定义

C++表达式要么是右值(rvalue),要么是左值(lvalue)。这两个名词是从C语言中继承过来的,
原本是为了帮助记忆,左值可以放在赋值语句的左边,而右值不可以。

当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是
对象的身份(在内存中的位置)。

閱讀全文