Numpy将dispatcher用于参数置换
这个问题是针对的,它提出了一种调度机制,用于将任意函数与实现Numpy将dispatcher用于参数置换,numpy,Numpy,这个问题是针对的,它提出了一种调度机制,用于将任意函数与实现\uuu数组\u函数\uuu接口的类(例如np.ndarray)一起使用 为my_einsum运行测试 a = ArrayLike() print(my_einsum('...', a)) a = ArrayLike() print(my_einsum('...', a)) 输出: RuntimeError: This should currently never happen func = <function my_ein
\uuu数组\u函数\uuu
接口的类(例如np.ndarray
)一起使用
为my_einsum
运行测试
a = ArrayLike()
print(my_einsum('...', a))
a = ArrayLike()
print(my_einsum('...', a))
输出:
RuntimeError: This should currently never happen
func = <function my_einsum at 0x7efded61bd30>,
types = (<class '__main__.ArrayLike'>,),
args = ('...', <__main__.ArrayLike object at 0x7efdef83efa0>),
kwargs = {}
对于ArrayLike
,函数永远不会被\uuuu数组\u函数
方法拦截。不过,这可以通过稍微更改调度器来解决:
def _einsum_dispatcher(subscripts, *operands):
return (*operands,)
现在,当再次以完全相同的方式测试my_einsum时:
输出:
RuntimeError: This should currently never happen
func = <function my_einsum at 0x7efded61bd30>,
types = (<class '__main__.ArrayLike'>,),
args = ('...', <__main__.ArrayLike object at 0x7efdef83efa0>),
kwargs = {}
func=,
类型=(,),
args=(“…”,),
kwargs={}
函数是正确的,但是如何将
subscripts
参数移动到kwargs
?只能用于分派参数类型吗?当文档说:einsum(下标,*操作数,
)时,实际代码是def einsum(*操作数,
。也就是说,下标
只是操作数的第一个
——如果它是字符串的话。有一种替代的语法,可以将操作数和子列表相互感知。在\u einsum\u path\u dispatcher
和\u einsum\u dispatcher
中有一条关于这方面的注释。我的问题并不是特定于EINum dispatcher。但看起来dispatcher根本不可能重新排列参数:“dispatcher函数需要与其对应的NumPy函数共享完全相同的位置、可选和仅关键字参数。”。我只是对dispatcher的使用感到困惑,它只是用于类型推断吗?