确定扩展NumPy类型的转换

bhe*_*ilr 3 python types numpy

我有一个基于NumPy的库,有一些类重载算术运算.由于大量的错误检查,内部有点毛茸茸,但我遇到了一个严重的问题,我是怎么做的.

该库背后的想法是使程序员使用最少的语法和努力使其非常容易和直观.因此,我希望很容易组合不同数据类型的数组,并简单地将较窄的数据类型转换为更广泛的情况.

例如,如果我有两个数组,一个使用dtype float64,另一个使用dtype complex128,当将它们添加到一起时,我想将其转换float64complex128,但如果是,float64并且complex192我想转换为它.但是,如果它是一个组合float64complex64,没有不失精确度两者之间的有效转换float64,所以我想都转换为complex128.

我立即看到了这个问题,即如果我希望我的库完全可靠,我必须寻找每种类型的组合并确定它们最窄的常见加宽类型(想想最不常见的多重类型).我希望一切最广泛的类型可能转换,因为这很快成为记忆效率低下,而且我经常存储在内存中非常大的阵列.

有没有一种好方法可以确定两种NumPy类型之间最窄的常见加宽类型?

War*_*ser 5

@amaurea有正确的想法; 事实上,函数已经存在于numpy中.看一下result_typepromote_types.