假设我有以下数组:
A = np.array([1,2,3,4])
字符串我现在想计算以下总和:
np.cos(A[0])+np.cos(A[1])*np.sin(A[0])+np.cos(A[2])*np.sin(A[1])*np.sin(A[0])+np.cos(A[3])*np.sin(A[2])*np.sin(A[1])*np.sin(A[0])
型对于一般数组,什么是有效的方法?
cyvaqqii1#
逻辑并不完全清楚,但假设你想将每个值cos乘以前一个值的sin,并将第一个值乘以最后一个值的sin,你可以roll,然后相乘并sum:
cos
sin
roll
sum
(np.cos(A)*np.sin(np.roll(A, 1))).sum()
字符串
pcww981p2#
根据你所写的,你会得到各种因子的和,其中每个i-th因子是i-th元素的余弦和所有前面元素的西内斯的乘积。如果这是真的,你可以在下面的方式中执行一个双for循环:
i-th
for
np.sum([np.cos(A[i]) * np.prod([np.sin(A[j]) for j in range(i)]) for i in range(len(A))])
字符串如果没有额外的信息,很难评估是否存在更有效的方法。假设你有足够的RAM,一个无循环的解决方案是:
# define a sines matrix NxN sin_matrix = np.sin(A)[None, :].repeat(10, axis=0) # replace the sines whith 1 (neutral for the product) where index >= column sin_matrix[np.arange(len(A))[:,None]<=np.arange(len(A))[None, :]] = 1
型输出为:
np.cos(A)*sin_matrix.prod(axis=1)
型
2条答案
按热度按时间cyvaqqii1#
逻辑并不完全清楚,但假设你想将每个值
cos
乘以前一个值的sin
,并将第一个值乘以最后一个值的sin
,你可以roll
,然后相乘并sum
:字符串
pcww981p2#
根据你所写的,你会得到各种因子的和,其中每个
i-th
因子是i-th
元素的余弦和所有前面元素的西内斯的乘积。如果这是真的,你可以在下面的方式中执行一个双for
循环:字符串
如果没有额外的信息,很难评估是否存在更有效的方法。
假设你有足够的RAM,一个无循环的解决方案是:
型
输出为:
型