是否存在Numpy/Scipy内置函数可解析数组组合的基础算术语法?
回答
Numpy 和 Scipy 并没有专门内置用于解析这类自定义数组算术组合语法的函数——但你的需求其实完全可以直接用 Python 原生的 eval() 实现,因为你允许的语法本身就是标准的 Python/Numpy 合法表达式。
具体实现思路
- 准备好用户可访问的数组变量(比如
a、b、c),构造一个受限的命名空间(即使你说仅自身使用无安全问题,这种方式也能避免意外调用无关代码)。 - 直接将用户输入的公式传入
eval(),仅在这个受限命名空间中执行。
示例代码:
import numpy as np # 假设这是用户选择的原始数据数组 a = np.array([1, 2, 3, 4]) b = np.array([5, 6, 7, 8]) c = np.array([9, 10, 11, 12]) # 构造仅包含允许内容的命名空间 allowed_context = { 'a': a, 'b': b, 'c': c, # 如果需要开放更多numpy函数,可添加,但你的场景里数组自身方法已足够 } # 用户输入的公式 user_formula = "a + b.roll(2) / b.max() * a.max()" # 执行计算 result = eval(user_formula, {}, allowed_context) # 后续绘图逻辑 # plt.plot(result)
额外说明
- 你允许的语法(基础算术、浮点数、数组方法如
.max()、.roll())都是 Numpy 数组原生支持的操作,eval()可以直接解析执行,不需要额外的解析工具。 - 如果需要严格限制用户只能使用指定方法(比如禁止调用其他数组方法),可以自定义数组包装类,仅暴露允许的方法,但对于内部使用场景,通常没必要这么做。
内容的提问来源于stack exchange,提问作者Basj
相关产品推荐
相关产品推荐

