编写与任何numpy-ish数组库兼容的后端不可知数字代码。

autora的Python项目详细描述


一个轻量级的python自动数组库。编写适用于以下对象的数字代码:

Travis-CICode CoverageCode Quality

例如,考虑使用改进的gram-schmidt算法将矩阵正交化的函数:

fromautorayimportdodefmodified_gram_schmidt(X):Q=[]forjinrange(0,X.shape[0]):q=X[j,:]foriinrange(0,j):rij=do('tensordot',do('conj',Q[i]),q,1)q=q-rij*Q[i]rjj=do('linalg.norm',q,2)Q.append(q/rjj)returndo('stack',Q,axis=0,like=X)

它现在与上述库的all兼容!(注意,这个特别的例子可能也很慢)。如果您不喜欢显式的^{t t 1}$语法,则可以将假numpy对象导入为替换项

>>>fromautorayimportnumpyasnp>>>importtensorflowastf>>>x=tf.random.uniform(shape=(2,3,4))>>>np.tensordot(x,x,[(2,1),(2,1)])<tf.Tensor'Tensordot:0'shape=(2,2)dtype=float32>>>>np.eye(3,like=x)# many functions obviously can't dispatch without the `like` keyword<tf.Tensor'eye/MatrixDiag:0'shape=(3,3)dtype=float32>

当然,对于所有函数、操作和库来说,完全兼容是不可能的,但是autoray有望使这项工作更加容易。

它是如何工作的?

autoray基本上是对do的第一个参数或like关键字参数(如果指定)使用单个分派机制,从定义了所提供数组的模块中获取函数。此外,它还缓存一些自定义翻译和查找,以便处理像tensorflow这样的库,这些库不能完全复制numpyapi(例如sum被转换为tensorflow.reduce_sum)。

备选方案

  • __array_function__协议已经suggested,现在在numpy中实现。希望这最终会消除对autoray的需求。另一方面,第三方库本身需要实现接口,例如,在tensorflow中还没有实现。
  • uarray项目旨在开发一个通用数组接口,但附带了警告“这是一个实验性的、非常早期的研究代码。不要用这个。

安装

可以使用pipautoray作为标准安装。或者,只需将单片autoray.py复制到您的项目内部(如果依赖关系不是您的事情)。

贡献

非常欢迎额外翻译等请求!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java文件分块,获取长度字节   java嵌入式Tomcat不执行jsf页面   java我的数据库中有2个实体,但hibernate返回其中6个。   java如何基于逗号拆分字符串   java取消已经运行的CompletableFutures的预期模式是什么   java如何在informix中从另一个数据库复制表ddl和数据   为什么图片是黑色的?   java根据字符串数组中的单词筛选列表   Java8的集合。平行流有效吗?   Kotlin中的java静态内部类   java如何在GUI中生成一列字符串   javafx如何正确使用高对比度主题?   带空格的javascript Httpurlconnection参数   java如何设置GridBagLayout的约束   java如何在一个线程可能尚未初始化时关闭另一个线程   java将简单时间格式转换为特殊时间格式(hhmmt)   安卓/java阵列重复过滤器的问题   java在队列的链接实现下,入队和出队是如何工作的   java更新sql外键约束