如何在NumPy中实现Mathematica的MixedRadix功能?
NumPy中混合进制转换的实现方案
NumPy并没有提供直接对应Mathematica MixedRadix的内置函数,但可以利用其向量化特性实现符合惯用风格的版本,替代原生Python的循环实现。
符合NumPy风格的实现代码
import numpy as np def np_mixed_radix(num, bases): bases = np.asarray(bases) # 计算各进制位的权重(从左到右的累积乘积逆序) weights = np.cumprod(bases[::-1])[::-1] # 补全最后一位权重为1,确保位数匹配 weights = np.append(weights, 1)[1:] # 向量化计算每一位数字 digits = (num // weights) % bases return digits
实现说明
- 先将输入的
bases转为NumPy数组,为后续向量化操作铺路 - 权重数组的计算:通过
cumprod(累积乘积)得到每一位进制对应的权重,例如输入bases=[2,3,4]时,权重数组为[12,4,1] - 利用整数除法和取模的向量化运算,一次性完成所有位数字的计算,避免了原生Python的循环操作,在处理批量数字(如
num为NumPy数组)时效率优势明显
示例验证
调用np_mixed_radix(10, [2,3,4])会返回array([1, 0, 2]),和你原生Python版本的输出一致,验证了正确性。
内容的提问来源于stack exchange,提问作者xpqz
相关产品推荐
相关产品推荐

