在Sympy中读取指数幂:基于正交矩阵与指数函数的加密方案实现问题
SymPy提取指数幂并存储到数组的实现方法
如果你处理的是带指数函数的表达式/矩阵,可按以下步骤实现需求:
- 基础依赖导入
import sympy as sp import numpy as np
- 单个表达式场景提取指数
假设你拿到的加密后表达式是含指数函数的多项式形式:
# 先定义方案中用到的符号 x = sp.symbols('x') # 示例表达式,可替换为你实际生成的加密表达式 expr = 3*sp.exp(2*x) + 5*sp.exp(-7*x) + sp.exp(1.5*x) # 抓取所有exp项 exp_terms = expr.atoms(sp.exp) # 提取完整指数存入数组 exponents = np.array([term.args[0] for term in exp_terms]) # 若仅需要指数中x的系数(符合该加密方案指数为x线性项的设定) exp_coeffs = np.array([sp.expand(e).coeff(x) for e in exponents])
输出的exp_coeffs即为存储了所有指数系数的数值数组。
- SymPy矩阵场景提取指数
如果指数项存储在正交矩阵的元素中,遍历矩阵元素处理即可:
# 示例2*2正交矩阵,可替换为你实际生成的矩阵 M = sp.Matrix([ [sp.exp(3*x), sp.exp(-2*x)], [sp.exp(5*x), sp.exp(4*x)] ]) exponents_list = [] for elem in M: exp_terms = elem.atoms(sp.exp) for term in exp_terms: exponents_list.append(term.args[0]) # 转为numpy数组 exponents_arr = np.array(exponents_list)
*注意:如果表达式存在嵌套指数、或者指数为非线性形式,按需调整term.args[0]后的解析逻辑即可,SymPy的表达式树支持逐层遍历提取对应节点值。
内容的提问来源于stack exchange,提问作者jdella
相关产品推荐
相关产品推荐

