Weitang Li's blog

We've havered enough. Let's get tae work!


  • Home

  • About

  • Archives

矩阵、张量乘法(numpy.tensordot)的时间复杂度分析

Posted on 2018-10-12 | Edited on 2018-12-13

两个大小都是\(N \times N\)的矩阵相乘,如果使用naive的算法,时间复杂度应该是\(\mathcal{O}(N^3)\),如果使用一些高级的算法,可以使幂指数降到3以下。对于一般情况的矩阵乘法,特别是张量乘法(numpy中的tensordot函数),时间复杂度又如何呢?

Read more »

Python里的and和or

Posted on 2018-09-26 | Edited on 2018-12-30

Python里的and和or可以说是最基础的小白语法了,今天在看Flask源码的时候有几处关于and和or的地方却感觉看不太懂,如:

1
2
3
4
5
6
def 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'的执行逻辑应该是这样的:

  1. os.environ.get('FLASK_ENV') 获得一个返回值,如'development'或None
  2. 执行隐式的类型转换bool('development')得到True或者bool(None)得到False
  3. 对or进行短路求值,如果or之前是True,直接返回True
  4. 反之则对or之后的值进行类型转换bool('production')得到True,并返回True
  5. 综上肯定返回True

其实如果合理推断一下,应该能猜出来return os.environ.get('FLASK_ENV') or 'production'的作用是当os.environ.get('FLASK_ENV')的返回值不是None的时候,返回其返回值,否则返回'production',但是这个语法和我之前曾经理解的and和or完全不同。我本来觉得这是return里的一个特例,查了一下才发现这是Python的标准语法。

Read more »

遇到一本好书,如沐春风

Posted on 2018-09-14 | Edited on 2018-09-26

自认为读过看过的Python书、资料不算少了,没有太多眼前一亮的。初看《Python Cookbook》时曾经觉得如鱼得水,但是看多了也就觉得不过尔尔了,而且组织方式其实挺杂乱的。
《Python Linux系统管理与自动化运维》是我感觉最近一年读到的最好的技术书籍。

我觉得这本书好,原因有两个,其一是很对口,其二是写的真的很好,而且很新没有过时。
写得好体现在内容组织的非常详实而又精炼。可以说是用最短的篇幅和最通俗易懂的语言,照顾到了应该介绍的各个方面的最精华的内容,没有任何多余的废话。看起来十分过瘾。本来我还试图去做图书笔记,乃至写个blog,后来感觉到这本书本身就是对它自己最好的笔记。

本来是网上看看的,果断入正。

记一次杂活

Posted on 2018-09-05

昨天接了这样一个活:有500篇文献的记录,将它们导入Web of Science然后生成bib文件,然后交给图书馆查他引。本来带头的老师计划把任务平均分给包括我在内的三个人人工去做,我自己试了试写了个脚本用Selenium自动化地完成了大部分。Selenium自动化测试如果开着浏览器窗口还是很cool的,所以我有点小得意,想po一下代码。但代码其实也没什么可po的,都是很简单的业务代码而已,倒是在这个过程中我有些体会,好像还蛮有意思。

Read more »

将sympy Matrix转化为LaTeX代码——快速绘制大型LaTeX矩阵

Posted on 2018-06-25 | Edited on 2018-06-26

\(\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]

image
此外使用bmatrix等环境也ok。这种语法对于小型矩阵比如例子中的\(3\times 3\)矩阵来说,是很方便的。然而对于比较大型的矩阵,比如\(12\times 12\)的矩阵,直接用\(\LaTeX\)来写就显得有点蛋疼了,光是实现有效编写大型\(\LaTeX\)矩阵的前提——&对齐,就足以使人痛不欲生。如果能指定矩阵的逻辑,然后自动生成\(\LaTeX\)代码就好了!Python的sympy库就可以很好地完成这个任务。

Read more »

《Web前后端漏洞分析与防御》总结

Posted on 2018-06-20 | Edited on 2018-12-04

《Web前后端漏洞分析与防御》是慕课网的一门网课,时长约11小时,原名叫做《腾讯大牛教你web前后端漏洞分析与防御》。尽管原名很山寨,这门课的质量还是不错的,主要讲解了XSS、CSRF、点击劫持、中间人攻击、密码安全、SQL注入和文件上传漏洞几个方面。

Read more »

一个思考Monty Hall问题的直观角度

Posted on 2018-06-13 | Edited on 2018-06-20

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类似的问题,而大多数人面对这个问题应该会做出正确的选择——

Read more »

轻松评教

Posted on 2018-06-05

自本科起每个学期都必须要评教。所谓评教就是在网上给所有这学期的老师助教打分,评了教才能选下学期的课。

由于每个老师都有七八项指标要打分,有时一门课又有多个老师,实际做起来还是挺麻烦的。

也知道校内有人做了Chrome插件来自动评教,还能分数随机波动之类的,但是装一个一年用两次的插件成本也不低。

最近把JS方面的知识了解了一下,这次评教就发现自动评教非常简单,只要在控制台简单一行:

1
$('select option[value="7"]').attr('selected', 'selected')

虽然简陋了一点,感觉比装个插件用起来舒服。计算机真不愧是生活实用技能啊…..

唯一可惜的就是,我今后评教的机会不多了……

自用Linux环境的常用配置

Posted on 2018-05-09 | Edited on 2019-02-24

Github上已经有很多repo存配置Linux环境的脚本了,我这里用博客形式记录是想不那么正式,随意一些。毕竟放在Github上总让人觉得必须要“编译通过”才能算是一个合格的repo。
目前我配置自用的Linux环境常做的有如下几件事:配置软件包管理器的源、oh-my-zsh和vim。

Read more »

Normal Mode (Huang-Rhys Factor) Calculator

Posted on 2018-03-23 | Edited on 2018-06-13
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.

Read more »
1234

Weitang Li

Weitang Li's blog

35 posts
GitHub E-Mail
© 2022 Weitang Li
Powered by Hexo v3.4.4
|
Theme – NexT.Mist v6.4.2