先上结论:NumPy 中对 array
使用 multiply()
或 *
操作符并不是矩阵乘法,正确的用法是 dot()
或 matmul()
,或者对 matrix
使用 *
。
根据 numpy.multiply 文档说明,multiply()
是 element-wise 的乘法,换句话说,是把两个入参数组中对应元素进行相乘。
举个栗子:
>>> from numpy import * >>> a = [1, 2, 3, 4, 5, 6] >>> b = [6, 5, 4, 3, 2, 1] >>> ma = reshape(a, (2, 3)) >>> mb = reshape(b, (3, 2)) >>> ma array([[1, 2, 3], [4, 5, 6]]) >>> mb array([[6, 5], [4, 3], [2, 1]]) >>> multiply(ma, mb) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: operands could not be broadcast together with shapes (2,3) (3,2) >>> c = arange(6).reshape(2,3) >>> d = arange(6).reshape(2,3) >>> c array([[0, 1, 2], [3, 4, 5]]) >>> d array([[0, 1, 2], [3, 4, 5]]) >>> c * d array([[ 0, 1, 4], [ 9, 16, 25]])
在上面的代码中,ma
是 2×3 矩阵,mb
是 3×2 矩阵,预期二者相乘的结果应该是一个 2×2 矩阵,但实际运行会报异常。在 multiply()
看来,ma
和 mb
只是两个形状不同的二维数组,因此无法把对应的元素进行相乘。c * d
符合 element-wise 相乘的结果。
正确的用法是什么呢?
dot()
等价于矩阵乘法>>> ma.dot(mb) array([[20, 14], [56, 41]])
>>> matmul(ma,mb) array([[20, 14], [56, 41]])
array
类型转换为 matrix
再使用 * 操作符>>> np.asmatrix(c) * np.asmatrix(d.reshape(3,2)) matrix([[10, 13], [28, 40]]) >>> np.asmatrix(c) * np.asmatrix(d.T) matrix([[ 5, 14], [14, 50]]) >>> np.asmatrix(c) * np.asmatrix(d.T) matrix([[ 5, 14], [14, 50]]) >>> np.mat(c) * np.mat(d).T matrix([[ 5, 14], [14, 50]]) >>> np.mat(c) * np.mat(d.T) matrix([[ 5, 14], [14, 50]])
@
操作符,参考这里,由于不用 python3,没试过从 0 开始,认真学习一点东西,就像过去那样。
外网 IP 查询服务——这应该是我写过最简单、但又有实际用处的 TCP 服务了。
用 Go 语言实现,加上空行还不到 30 行代码,请自行前往 GitHub 获取。
通过 go build
命令编译,在 macOS 上编译 Linux 版本需要指定 GOOS
参数:
GOOS=linux go build main.go
生成的 main
可以直接运行了:
./main
或者更高级点,通过 supervisor
配置成服务,使用 supervisorctl
控制。
用 telnet
连接部署机器的 6666 端口即可,如 migege.com:6666:
telnet migege.com 6666 Trying 120.27.122.8... Connected to migege.com. Escape character is '^]'. 1xx.2xx.2xx.1xxConnection closed by foreign host.
再也不用担心 ns1.dnspod.net 没有响应了。
今天刚入手树莓派 3,有种相见恨晚的感觉,接下来又有得折腾了。
我相信虽然树莓派足够轻便,但你也不会愿意总把它带在身边,应该还是需要固定在某个地方提供服务的,比如藏在家里的电视柜里——你要拿它做一个机器人或者无人机之类,当我没说,而且这篇文也没必要往下看了,这里仅针对拿树莓派当 Linux 远程主机使用的场景 ;-)
如果家里的宽带没有固定公网 IP,不在家的时候怎么访问就很成问题。过去我在西数 MyBookLive 上的做法是,每天中午 12 点,crontab 执行脚本获取外网 IP,email 给我。low 是 low 了点,但基本上能满足需求,主要考虑 MyBookLive 频繁唤醒几 T 的大硬盘会缩短寿命,所以把脚本执行的周期设得比较长。
现在有了树莓派,没有挂硬盘,只插了个 32G 的 TF 卡,可以随便搞了,最优的方案当然是动态域名解析。于是在 DNSPod 注册了账号,把域名的 nameserver 设置到 DNSPod,再用 python 写了个脚本专门干这个事,代码放在 github 上了,把文档贴一下:
@author migege
@version 0.0.2
dnspod.py 是基于 DNSPod 服务的动态 DNS 脚本,用于检测 IP 变化并更新至 DNSPod,支持多域名解析。支持 Linux 设备,包括树莓派(Raspberry Pi)。
python 的模块可通过 pip install
命令安装。如果未安装 pip,请先安装 pip。
安装 git 客户端,通过本命令获取 dnspod.py
git clone https://github.com/migege/dnspod.git dnspod
然后到 dnspod 目录下新建 conf.yaml
文件,根据您的 DNSPod 设置,填入以下内容:
token: <your_api_token> sub_domains: <your_first_sub_domain_name>: domain_id: <your_domain_id> record_id: <your_record_id> <your_second_sub_domain_name>: domain_id: <your_domain_id> record_id: <your_record_id>
最后设置 crontab 定时任务
*/10 * * * * cd <path_to_dnspod>; /usr/bin/python dnspod.py conf.yaml > /dev/null 2>&1 &
Mac OS X 系统自带的 grep
命令即便加上 --color
参数也是无法输出彩色文件名和行号的,在当前最新的 El Capitan 10.11.6 中仍然如此,因为 grep
版本太低了,GNU grep 2.5.3 以上版本才支持 Multiple colors 特性。
先上一个新旧命令对比效果图:
如果安装了 homebrew
,在终端中输入以下命令安装 GNU grep:
brew tap homebrew/dupes/ brew install homebrew/dupes/grep
默认会安装为 /usr/local/bin/ggrep
,在 bash|zsh|各种sh
做一个 alias
替换掉 grep
好了:
alias grep='ggrep -Hn --color=always'
http://superuser.com/questions/419467/grep-in-mac-os-xs-terminal-only-displaying-one-color
刚从前同事那儿听到这个消息,晴天霹雳啊!让我这重度铁粉情何以堪,只能买迅雷会员了?
F***!!!
小马哥这几年变成纯粹的商人了,把他眼里「不重要的」或者觉得「做不好的」业务干掉一个又一个,太令人伤心了
QQ 旋风在 TX 内部是不是快被抛弃了,客户端更新迟缓、服务稳定性越来越糟……时不时地要么刷不出下载列表,要么需要多次重复操作才能添加成功……但仍然改变不了我这名重度铁粉对它的依赖。因为在 userscript 的帮助下,网页版旋风可以导出、RPC 到 aria2 下载,这几乎是我迄今为止用过最爽的下载方式,没有之一。
可是最近一阵子没怎么下载,忽然发现旧版本的 userscript 不太好使了,在 console 上可以看到旋风服务返回「未登录」的响应。一直想抽空瞧瞧这个问题,但总是被各种事情打扰,晚上索性搜了下,发现原作者在 0.8.0 版本中已经解决了这个问题,那还是直接拿来用好了。俺正在全速下载「权力的游戏」第 6 季 1-8 集。顺便鸣谢下联通,带宽貌似已经免费升级到了 50M。
最后奉上「QQ 旋风离线下载网页增强」的 userscript,猛击 https://github.com/rhyzx/xuanfeng-userscript。
谢谢作者 rhyzx。