1. 修正 Inkscape 编辑 matplotlib 导出的文件时内存泄漏的问题

    以前的文章中提到,在 matplotlib 中做标注相比 Origin 来说比较麻烦,但可以输出 SVG 格式,然后用 Inkscape 来做标注,不管是标注文字还是箭头一类,都比较简单。而且 SVG 由于它是一种很标准的通用格式,可以很容易转成 PDF、EMF 或者其它格式。然而最近发现了一个问题,较新版本的 matplotlib 导出的 SVG 在用 Inkscape 编辑时,存在内存泄漏的问题。任何一个几十 kB 的文件,打开后 Inkscape 也会占用几个 G 甚至更大的内存,操作也会变得非常卡顿,十分不正常。

    这个帖子中较为详细地分析了问题的成因,主要原因是 miterlimit 默认被设置成了 100000。恰好由于 Inkscape 渲染 …

    read more
  2. 用 matplotlib 画出规范的论文插图

    我最近所写的论文中基本上放弃了 Origin,而转为用 matplotlib 画几乎所有的插图。相比专业的 Origin,MPL 基本可以替代所有的功能,甚至单论功能还略有胜出。从可定制性角度,两者也接近,但 MPL 没有 Origin 图形化操作的直观性,这方面有所欠缺。而且 MPL 默认的主题和格式都与论文所要求的质量相去甚远,不像 Origin 一样基本默认格式就能凑合用了。

    从我自己的研究领域来看,插图的规范性,主要有几个方面的问题需要设置:

    1. 尺寸,包括图形尺寸、线宽等
    2. 标注,包括对图线的标注、legend等
    3. 图层,叠加不同的坐标轴等
    4. 文字样式、字号等
    5. 输出格式

    一个基本图形的示例

    下面给出了一个示例的代码,通过自定义各种格式基本上可以说符合正式出版的要求:

     1
     2
     3
     4
     5
     6
     7
     8
     9 …
    read more
  3. 检查多维 ndarray 中是否有某元素

    最近又在写科学计算的代码了。今天偶然发现一个 Numpy 中的一个小问题,不注意的话还是很容易踩坑的。

    通常来说,检查一个类似列表的对象中是否有某个元素,最直接的办法是用 in。这个方法对列表、字典、元组等都适用,对一维的 ndarray 对象也适用,例如:

    a = [1, 2, 3]
    print(4 in a)
    b = np.array(a)
    print(4 in b)
    

    结果是False False

    但是,如果这个 ndarray 是二维的数组,结果就非常奇怪了:

    a = [[0,0], [0,1]]
    print([0,2] in a …
    read more
  4. 保存网页到本地的方法(2)

    前一篇文章中讲了我常用的保存网页到本地的办法,最近又有一些新的发现。

    首先是 pandoc 转 docx 到 markdown 对 pandoc 的版本是有要求的,目前版本是1.17.1,可以正确处理带中文的文件。但如果用的是更旧的版本(似乎是1.15以前),会提示无法解码 UTF-8,因此推荐先把 pandoc 版本更新。

    本文最主要想更新的是一个新的发现,我找到了一个叫 Typora 的软件,它本身是一个支持所见即所得的 markdown 编辑器(从知乎上的讨论来说,实现这样的东西似乎难度还很大),但它居然还支持了粘贴网页直接转换成 markdown 的功能。也就是说,不再需要手动保存成 docx,只需要把网页直接粘到里面就已经是 markdown 了。

    还有一点很重要的特性,就是由于它本身所见即所得的特性,相当于每次打开 md 文件都会自动渲染成网页格式,所以甚至省掉了再重新转换成 html …

    read more
  5. 保存网页到本地的两种办法

    Edit: 后续更新

    自从不太使用 Evernote 之后,如何干净地保存网页信息就成了一个大问题。所谓「干净」,就是只保存网页主体的信息,而不包括其它不相关的部分,也就相当于保存下 Firefox 所提供的阅读模式中显示的内容。

    本来,Evernote 提供的「悦读」是一个很好的方案,它首先提供了一个阅读模式,可以很好地对绝大多数网页实现抓取,然后它可以直接保存到 Evernote,可以说基本解决了我的需求。但由于各种原因,我现在基本不用 Evernote,使得这个需求还不太好自己解决了。

    最开始想的办法是自己写一个 Python 脚本,爬一下网页,然后抓取主体信息,最后保存,看起来似乎每一个环节都不复杂,但尝试写了一下发现还是很麻烦:不同网站网页结构不同,涉及到如何分别处理的问题;有些文章需要翻页;有些网站如知乎专栏为了防转载做了不少障碍,等等。最终发现这个脚本要达到预期的目的,远不是半个下午就能轻松解决的小项目,暂时就打消了这个念头。

    经过一些有意搜索和偶然的发现,现在有两种对我而言比较合适的方法。

    方法一是打印到 PDF。这个需要用到微软的 Edge 浏览器 …

    read more
  6. Git 笔记

    声明:这个笔记是根据我自己的理解所写,可能有部分理解有误或不全,仅供参考。

    以前在装 Vundle 的时候安装了 Git,但只作为 Vundle 的后台使用,没有直接使用过 git。趁着这次搬博客的机会,大致学会了基础的使用,本文是对 git 基本操作尤其是与 github 结合的一个简单笔记,适合零基础的人入门,也作为我自己的一个参考手册。


    最简版

    • git init,新建一个 repo
    • git clone <some_url> [destination_dir],从 Github 或其它网站下载 repo 的完整内容
    • 修改文件,然后 git status 查看有哪些修改
    • git add . 添加所有的修改到 stage
    • git status,确认所有修改
    • git commit …
    read more

« Page 2 / 8 »

links

social