如何高效计算NumPy数组的特定三角函数累加乘积和?
高效实现指定累加和的方法
计算规律分析
对于任意长度的数组A,你需要的累加和可拆解为:每一项是cos(A[i])乘以A中前i个元素(索引0到i-1)的sin值的乘积,当i=0时,乘积项为1(无前置元素)。展开形式为:
cos(A[0]) + cos(A[1])×sin(A[0]) + cos(A[2])×sin(A[1])×sin(A[0]) + ... + cos(A[-1])×sin(A[-2])×...×sin(A[0])
numpy高效实现方案
利用numpy的向量运算和累积乘积函数cumprod,可避免循环,大幅提升计算效率,代码如下:
import numpy as np def compute_custom_sum(A): sin_vals = np.sin(A) # 生成前置sin值的累积乘积数组:开头补1,取前len(A)项 cum_sin_products = np.cumprod(np.insert(sin_vals, 0, 1))[:-1] cos_vals = np.cos(A) return np.sum(cos_vals * cum_sin_products) # 测试示例 A = np.array([1,2,3,4]) print(compute_custom_sum(A))
原理说明
np.sin(A)计算数组所有元素的sin值,得到sin_valsnp.insert(sin_vals, 0, 1)在sin_vals开头插入1,再用cumprod计算累积乘积,最后取前len(A)项,得到的cum_sin_products正好对应每一项cos(A[i])需要乘的前置sin乘积- 将
cos_vals与cum_sin_products逐元素相乘后求和,即为最终结果
这种方法基于numpy底层优化运算,处理大数组时比Python循环快数个数量级。
内容的提问来源于stack exchange,提问作者Algebro1000
相关产品推荐
相关产品推荐

