Python中实现基于数组R、p、k的逐元素表达式求和并构建结果数组的技术求助
解决你的数组求和问题
嘿,我来帮你搞定这个需求!你想要针对R里的每一个元素,计算它和p、k所有对应元素组合的p[j] + k[j] * R[i],把这些结果加起来,再依次存入新数组sigma对吧?
先看看你现有代码的问题:你每次循环j的时候,都直接把单个计算结果赋值给sigma,而且没有做累加,最后sigma只会保留最后一个j的结果,也没放到对应的sigma[i]位置上,所以没法得到每个R元素对应的总和。
修正后的基础循环写法
我给你调整一下代码,核心是加一个累加器,把每个j的结果加起来,再放到sigma的对应位置:
import numpy as np R = [1,4,6] p = [6,4,1] k = [8,5,2] sigma = np.zeros(len(R)) for i in range(len(R)): total = 0 # 每次处理新的R元素时,重置累加器 for j in range(len(k)): current_val = p[j] + k[j] * R[i] total += current_val # 把当前j的计算结果累加到total里 sigma[i] = total # 把总和存入sigma的第i个位置 print(sigma)
运行这段代码,你会得到输出[19. 63. 91.],正好对应每个R元素的求和结果:
- 当R[i]=1时:
(6+8*1)+(4+5*1)+(1+2*1) =14+9+3=19 - 当R[i]=4时:
(6+8*4)+(4+5*4)+(1+2*4)=38+24+9=63 - 当R[i]=6时:
(6+8*6)+(4+5*6)+(1+2*6)=54+34+13=91
更高效的numpy向量写法
如果你想用numpy的向量运算来避免嵌套循环(尤其是数组很大的时候,这种方法速度更快),可以试试这个:
import numpy as np R = np.array([1,4,6]) p = np.array([6,4,1]) k = np.array([8,5,2]) # 利用numpy的广播机制,一次性完成所有计算和求和 sigma = (p + k[:, np.newaxis] * R).sum(axis=0) print(sigma)
这里的思路是:
- 把k转成(3,1)的二维数组,这样和R((3,))相乘时会自动广播成(3,3)的数组,每一列对应R的一个元素和k所有元素的乘积
- 加上p后,每一列就是R对应元素的所有
p[j]+k[j]*R[i]结果 - 按列求和(
sum(axis=0)),直接得到每个R元素对应的总和数组
内容的提问来源于stack exchange,提问作者mari
相关产品推荐
相关产品推荐

