两个大小都是\(N \times N\)的矩阵相乘,如果使用naive的算法,时间复杂度应该是\(\mathcal{O}(N^3)\),如果使用一些高级的算法,可以使幂指数降到3以下。对于一般情况的矩阵乘法,特别是张量乘法(numpy
中的tensordot
函数),时间复杂度又如何呢?
Python里的and和or
Python里的and
和or
可以说是最基础的小白语法了,今天在看Flask
源码的时候有几处关于and
和or
的地方却感觉看不太懂,如:1
2
3
4
5
6def get_env():
"""Get the environment the app is running in, indicated by the
:envvar:`FLASK_ENV` environment variable. The default is
``'production'``.
"""
return os.environ.get('FLASK_ENV') or 'production'
我觉得非常奇怪,这不是肯定返回True
的吗?
发生了什么
在我脑海中,os.environ.get('FLASK_ENV') or 'production'
的执行逻辑应该是这样的:
os.environ.get('FLASK_ENV')
获得一个返回值,如'development'
或None
- 执行隐式的类型转换
bool('development')
得到True
或者bool(None)
得到False
- 对
or
进行短路求值,如果or
之前是True
,直接返回True
- 反之则对
or
之后的值进行类型转换bool('production')
得到True
,并返回True
- 综上肯定返回True
其实如果合理推断一下,应该能猜出来return os.environ.get('FLASK_ENV') or 'production'
的作用是当os.environ.get('FLASK_ENV')
的返回值不是None
的时候,返回其返回值,否则返回'production'
,但是这个语法和我之前曾经理解的and
和or
完全不同。我本来觉得这是return
里的一个特例,查了一下才发现这是Python的标准语法。
遇到一本好书,如沐春风
自认为读过看过的Python书、资料不算少了,没有太多眼前一亮的。初看《Python Cookbook》时曾经觉得如鱼得水,但是看多了也就觉得不过尔尔了,而且组织方式其实挺杂乱的。
《Python Linux系统管理与自动化运维》是我感觉最近一年读到的最好的技术书籍。
我觉得这本书好,原因有两个,其一是很对口,其二是写的真的很好,而且很新没有过时。
写得好体现在内容组织的非常详实而又精炼。可以说是用最短的篇幅和最通俗易懂的语言,照顾到了应该介绍的各个方面的最精华的内容,没有任何多余的废话。看起来十分过瘾。本来我还试图去做图书笔记,乃至写个blog,后来感觉到这本书本身就是对它自己最好的笔记。
本来是网上看看的,果断入正。
记一次杂活
昨天接了这样一个活:有500篇文献的记录,将它们导入Web of Science然后生成bib文件,然后交给图书馆查他引。本来带头的老师计划把任务平均分给包括我在内的三个人人工去做,我自己试了试写了个脚本用Selenium自动化地完成了大部分。Selenium自动化测试如果开着浏览器窗口还是很cool的,所以我有点小得意,想po一下代码。但代码其实也没什么可po的,都是很简单的业务代码而已,倒是在这个过程中我有些体会,好像还蛮有意思。
将sympy Matrix转化为LaTeX代码——快速绘制大型LaTeX矩阵
\(\LaTeX\)中绘制矩阵的基本语法是:1
2
3
4
5
6
7\left[
\begin{array}{ccc}
0 & y & \alpha \\
\omega g & x^2 & 5 \\
e^{i\pi} & ab & \omega \\
\end{array}
\right]
此外使用bmatrix
等环境也ok。这种语法对于小型矩阵比如例子中的\(3\times 3\)矩阵来说,是很方便的。然而对于比较大型的矩阵,比如\(12\times 12\)的矩阵,直接用\(\LaTeX\)来写就显得有点蛋疼了,光是实现有效编写大型\(\LaTeX\)矩阵的前提——&
对齐,就足以使人痛不欲生。如果能指定矩阵的逻辑,然后自动生成\(\LaTeX\)代码就好了!Python
的sympy
库就可以很好地完成这个任务。
《Web前后端漏洞分析与防御》总结
《Web前后端漏洞分析与防御》是慕课网的一门网课,时长约11小时,原名叫做《腾讯大牛教你web前后端漏洞分析与防御》。尽管原名很山寨,这门课的质量还是不错的,主要讲解了XSS、CSRF、点击劫持、中间人攻击、密码安全、SQL注入和文件上传漏洞几个方面。
一个思考Monty Hall问题的直观角度
Monty Hall是概率论与数理统计中很经典的例子,非常容易迷惑没有学过条件概率/对该问题警戒心不强的人。如果对条件概率有一定了解,也的确理解了Monty Hall,那么这个问题就不过是课后作业水平了,其实没什么好讨论的。
不过据说爱因斯坦说过一句话:
If you can’t explain it to a six year old, you don’t understand it yourself.
(如果你不能把一个道理向六岁小孩解释清楚,你就没有真正理解它)
我相信概率论的内容(特别是和量子力学比较)应该是符合人的直觉的,所以我这几天睡觉之前总是思考Monty Hall,想给出一个直观的、没有学过概率论的人也能接受的解释。昨天我终于有所得,想到了一个和Monty Hall类似的问题,而大多数人面对这个问题应该会做出正确的选择——
轻松评教
自本科起每个学期都必须要评教。所谓评教就是在网上给所有这学期的老师助教打分,评了教才能选下学期的课。
由于每个老师都有七八项指标要打分,有时一门课又有多个老师,实际做起来还是挺麻烦的。
也知道校内有人做了Chrome插件来自动评教,还能分数随机波动之类的,但是装一个一年用两次的插件成本也不低。
最近把JS方面的知识了解了一下,这次评教就发现自动评教非常简单,只要在控制台简单一行:1
$('select option[value="7"]').attr('selected', 'selected')
虽然简陋了一点,感觉比装个插件用起来舒服。计算机真不愧是生活实用技能啊…..
唯一可惜的就是,我今后评教的机会不多了……
自用Linux环境的常用配置
Github上已经有很多repo存配置Linux环境的脚本了,我这里用博客形式记录是想不那么正式,随意一些。毕竟放在Github上总让人觉得必须要“编译通过”才能算是一个合格的repo。
目前我配置自用的Linux环境常做的有如下几件事:配置软件包管理器的源、oh-my-zsh和vim。
Normal Mode (Huang-Rhys Factor) Calculator
Frequency: | |
Lambda: | |
Displacement | |
Huang-Rhys Factor: |
Type in any of 2 variables in frequency, lambda, displacement or HR-factor, and the remaining 2 variables will be calculated automatically.
Click “clear values” to unlock auto-locked variables.