爱因斯坦求和约定
矩阵运算中,Einstein summation convention 可以让表达式非常简洁,并且对于我们理解矩阵运算非常有用。一个例子如下
1 | A = np.arange(3) |
矩阵运算中,Einstein summation convention 可以让表达式非常简洁,并且对于我们理解矩阵运算非常有用。一个例子如下
1 | A = np.arange(3) |
如何动态加载?启动一个单独的进程导入so文件。
最近在进行python和C++的混合开发,功能由C++实现,再将C++编译为so文件在jupyter noteboook中进行展示。在jupyter notebookz中涉及到”加载数据”和“加载so文件”。由于so文件改动较频繁,因此整个nb(notebook)经常重跑(终止python进程再重新跑)。但是在nb重跑的时候,数据也会重新加载,这部分耗时较久,成为了开发速度的瓶颈。
为了缩短程序重跑的时间,一个直观的想法是缩短程序数据加载时间。经过分析之后,发现数据加载耗时几乎无法减少。
因此决定采取的方案是重新导入so文件。但是经过查找发现
Python’s import mechanism will never dlclose() a shared library. Once loaded, the library will stay until the process terminates.
链接 a shared library. Once loaded, the library will stay until the process terminates.)
因此在nb的进程中重新导入so文件,几乎无可能。
所以决定绕过在nb中导入so文件,转而该为在nb中启动一个子进程,负责导入so文件、进行有关运算和返回结果。由于每次调用时都会启动一个全新的进程,它能够去导入磁盘最新的so文件,这样就可以在so文件改动之后,在不中断nb的情况下体现so文件的改动。
More Options
importlib
dataclasses会简化数据类的编码,period。在Python3.7中引入。
MRO(method resolution order, 方法解析顺序)是类继承中的一个问题。由于类可能继承多个基类,那么当触发多态时就面临这一个问题:从哪个基类里面去找方法?换句话说,类的遍历(解析)顺序是什么?
当只有一个基类时这个问题很简单,因此一般讨论的是多个基类的解析顺序。