Python 生成np.einsum评估图
我正计划教同事们Python 生成np.einsum评估图,python,numpy,scipy,numpy-einsum,Python,Numpy,Scipy,Numpy Einsum,我正计划教同事们np.einsum,希望展示如何将其简化为乘法和求和。 所以,我想用字母字符代替数字数据。在数组中 比如说,我们有A(2X2)作为[['A',b'],['c',d']]和b(2X1)作为[['e'],['f']] 我们可以使用einsum创建一个矩阵C,比如:np.einsum('ab,bc->ac',a,B) 我想看到的是:它返回计算图:类似于:a*c+…,等等 当然,np.einsum需要数字数据,如果给定要运行的上述代码,则会给出一个错误。tensordot有一个示例,利用
np.einsum
,希望展示如何将其简化为乘法和求和。
所以,我想用字母字符代替数字数据。在数组中
比如说,我们有A(2X2)作为[['A',b'],['c',d']]和b(2X1)作为[['e'],['f']]
我们可以使用einsum创建一个矩阵C,比如:np.einsum('ab,bc->ac',a,B)
我想看到的是:它返回计算图:类似于:a*c+…,等等
当然,
np.einsum
需要数字数据,如果给定要运行的上述代码,则会给出一个错误。tensordot
有一个示例,利用了'a'*3=>'aaa'
这一事实,使用字符串作为其数组之一。但是einsum
不能处理字符串(这是一个编译代码问题)
前一段时间,我写了一篇纯python作品,它解析'ij,jk->'字符串,并设置适当的乘积和计算。这包括额外的调试输出。这可能是您任务的起点
最新的einsum
进行了一些优化,并提供了一些调试帮助<代码>np。einsum_路径提供了有关该路径的更多信息
首先,为什么需要B是2-dim?为什么不干脆
np.einsum('ab,b->a',a,b)
现在实际问题是:
这并不完全是你想要的,但是通过使用A和B的智能选择,你可以使其可见。e、 g.A=[[1,10],[1001000]
和B=[1,2]
,这使得np.einsum('ab,B->A',A,B)=[212100]
发生的事情非常明显
更通用的版本稍微复杂一点(但希望不是必需的)。其想法是使用不同的素数(特别有用的是2和5,因为它们与dezimal系统中的易识别数对齐)。如果你要求一个以上的二元数,你可以考虑用素数(2,3,5,7等),然后将结果转换成另一个数字系统。
如果超过两个DIM->30进制
3维(2,3,5,7)->210维系统