Python 寻求求和(西格玛)函数的帮助
需要帮助来计算: 因此,y的总数等于x的个数,每个y由一个x和几个a计算。 下面是我的代码列表,它给出了a0的正确结果。计算这个的简单方法是什么?也许另一个版本也可以验证结果 非常感谢Python 寻求求和(西格玛)函数的帮助,python,numpy,sum,Python,Numpy,Sum,需要帮助来计算: 因此,y的总数等于x的个数,每个y由一个x和几个a计算。 下面是我的代码列表,它给出了a0的正确结果。计算这个的简单方法是什么?也许另一个版本也可以验证结果 非常感谢 import numpy as np import matplotlib.pyplot as plt a = np.array([1,2,3,4],float) # here we can give several a b = np.asarray(list(enumerate(a))) x = np.lin
import numpy as np
import matplotlib.pyplot as plt
a = np.array([1,2,3,4],float) # here we can give several a
b = np.asarray(list(enumerate(a)))
x = np.linspace(0.0,1.0,10)
y1 = []
for r in x:
y1.append(np.exp(np.sum((1-r)**2*a*((2*b[:,0]+1)*r-1+r)*(r-1+r)**(b[:,0]-1))))
y1=np.asarray(y1)
你可以用numpy写几乎完全相同的内容:
def f(x, a):
x, a = np.asanyarray(x), np.asanyarray(a)
x = x[:, None] # create new dimension to sum along
i = np.arange(len(a)) # create counter
return np.sum((1-x)**2 * a * ((2*i + 1) * x - (1-x)) * (x - (1-x))**(i-1), axis=-1)
作为旁注:有一些明显的代数简化,你可以利用。你应该做向量乘法。您已经有了np数组。非常感谢您的回答。我有一些问题,1,这里的x,a是元组,而每个组件是数组吗?2,axis=-1沿所有轴求和的含义是什么?@Z.Nie 1)不,x是一个二维数组,因此可以将单个元素称为x[i,j]。但是,在这种情况下,第二个维度是1,因此
j
必须为零(在这种情况下,不是一般情况下)axis=-1
表示沿最后一个轴的和,因此x
的原始尺寸(即轴0)保持不变。示例中的最后一个维度由i
和a
填充,它们与该轴一起折叠。谢谢。另一个问题。在您的代码中,如果返回((1-x)**2*a*((2*i+1)*x-(1-x))*(x-(1-x))**(i-1)),而不是求和,它将给出一个形状为(10,4)的数组。但当我定义相同的x,a,I并计算((1-x)**2*a*((2*I+1)*x-(1-x))*(x-(1-x))**(I-1)),它给出了一个错误。如何解释这种差异?@Z.Nie您可能遗漏了x=x[:,None]
这将在None
位置创建一个新轴,因此x
的新形状为(10,1)。计算表达式时,所有具有较小ndim的操作数都将在左侧用新轴填充,因此a
和i
的形状都变为(1,4)。(10,1)和(1,4)然后被广播到(10,4)。事物可广播的规则是,每个维度必须与其他操作数的相应维度匹配,或者为1.OK。谢谢。