我正在尝试对Python的某些建模进行总结。数学公式为:
i = 1的总和(f_i * c_i)直到i = 5
如何在不输入每个术语的情况下在Python中放入该金额?我之前将f1
定义为f5
,并且将c1
定义为c5
。
答案 0 :(得分:0)
如果您希望自由更改f和c之间的间隔(例如f[1:5]
和c[5:9]
),则可以使用压缩切片。请记住,可迭代项在Python中为零索引,并且切片包含起点,但不包含终点。因此,f[1:5]
包含四个项目,从索引1
开始。
f = [1,2,3,4,5,6,7,8,9]
c = [10,11,12,13,14,15,16,17,18,19]
print(sum([i*j for i, j in zip(f[1:5], c[1:5])]))
答案 1 :(得分:0)
对多个变量求和的一种方法是将它们存储在list
中,并使用for循环遍历列表。我假设您已经声明了所有c
和f
变量。
c_numbers = [c1, c2, c3, c4, c5]
f_numbers = [f1, f2, f3, f4, f5]
result = 0
for i in range(len(c_numbers)):
result += c_numbers[i]*f_numbers[i]
答案 2 :(得分:0)
除了使用列表之外,如果您有大型数据集,则还可以使用NumPy数组,该数组允许使用乘法运算符*
进行逐元素乘法。然后,您可以使用np.sum
对值求和。以下是使用小型数据集的示例。
import numpy as np
a = np.array([1,2,3,4,5])
b = np.array([10, 11, 12, 13, 14])
total = np.sum(a*b)
# 190
根据@Mad Physicist的建议,您想要的基本上是点积。
a.dot(b)
答案 3 :(得分:0)
您似乎需要预先创建列表。
f = [1,2,3,4]
c = [3,4,5,6]
my_sum = 0
for i in range(5):
my_sum = my_sum+f[i]*c[i]
答案 4 :(得分:0)
变量名f_i
不会变成变量名f1
,只是因为它在另一个名为i
的变量的定义附近。您要做的是根据i
的值计算变量的名称。在Python中执行此操作的方法是使用列表:
f = [1,2,3,4,5]
c = [2,4,6,8,10]
完成此操作后,f[1]
(不是f1
)的值为2(而不是1,因为列表索引基于零)。
那你就可以做
sum(f[i] * c[i] for i in range(5))
答案 5 :(得分:0)
通常,新手经常会想到在变量名称中可以有一个索引。因为变量名是字符串,所以实际上这会引起更多的问题。除了通过动态生成的名称访问变量的相对困难之外,还存在a_2
之后a_10
这样的事情,并且必须确定变量名是a_10
还是a_0010
。
为此,您有一个称为列表的数据结构,该结构允许您从单个位置使用实际整数访问元素。您可以将数字存储在一对列表中:
c = [1, 2, 3, 4, 5]
f = [0.1, 0.3, 0.2, 0.5, 0.4]
现在,您可以访问数据c[0]
,...,c[4]
,而不是c_1
,...,c_5
。索引从零开始。
如果您的数据总是这样配对,那么您也可以选择在结构中反映出来。除了选择两个列表之外,您还可以选择一个包含两个元组的列表:
cf = [(1, 0.1), (2, 0.3), (3, 0.2), (4, 0.5), (5, 0.4)]
现在您之前称为c_1
的将是第一个元组的第一个元素:cf[0][0]
。同样,f_5
将是最后一个元组的第二个元素:cf[4][1]
。
您要计算的乘积之和可以从两种数据排列方式中计算得出:
sum(i * j for i, j in zip(f, c))
OR
sum(i * j for i, j in fc)
我们传递给sum
的表达式称为生成器表达式。通常将其括在括号中,除非它是函数的唯一参数。该表达式将懒散地产生每个元素对的计算乘积。
如果您要进行大量数据分析,则可能需要研究Python的计算库。其中最基本的一个是numpy,它使您可以将数据存储在密集阵列中并对其执行快速矢量化操作。
要将列表转换为数组:
f = np.array(f)
c = np.array(c)
产品总和现在只是用于产品:
c.dot(f)
或者您可以“手动”计算它:
(c * f).sum()
或者,您可以
fc = np.array(fc)
fc
现在将是两列的矩阵,因此您可以执行以下操作:
fc[:, 0].dot(fc[:, 1])
OR
fc.prod(axis=1).sum()
答案 6 :(得分:0)