J'essaie de mettre en somme dans une modélisation dans Python. La formule mathématique est: p>
somme (f_i * c_i) pour i = 1 jusqu'à ce que je = 5 p> blockQuote>
Comment puis-je mettre dans cette somme en Python sans taper à chaque trimestre? J'ai défini
F1 code> à
F5 code> et
C1 code> à
C5 code> avant. P>
7 Réponses :
Si vous voulez la liberté de modification des intervalles entre F et C (par exemple, f [1: 5] code> et
c [5: 9] code>) Vous pouvez utiliser zipper tranches. Gardez à l'esprit que les itérables sont indexés zéro dans Python et qu'une tranche contient le point de départ mais pas le point de fin. En tant que tel
F [1: 5] code> contient quatre éléments, à partir d'index
1 code>.
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])]))
f [1: 5] code> ne contiendra que 4 éléments.
@Tobias_k je sais que c'était le point. Je ne sais pas si OP avait l'intention d'une approche inclusive ou exclusive, mais je suis sûr qu'ils peuvent comprendre comment ajuster la tranche.
Pourquoi ne pas savoir? SOMME MATHÉMATIQUE NOTATION TOUJOURS I> Comprend les limites. Donc, la somme sur [: 5] (qui change les indices de 1..5 à 0..4), ou somme sur 1..5 en mettant en fin de la plage sur 6.
Je suppose que cette discussion n'est pas pertinente. Il suffit d'inclure une ligne dans votre réponse que 1: 5 signifie 4 éléments et [1: 6] signifie 5 éléments et 0 est le premier index et 1 est le deuxième index. De cette façon, tous sont heureux. L'OP peut décider de lui-même ce qu'il ait réellement besoin
Un moyen de faire une sommation de nombreuses variables consiste à les stocker dans une liste code> code> et de boucler sur la liste à l'aide d'une boucle pour boucle. Je suppose que vous avez tous les C code> et
f code> déclaré.
Avez-vous essayé d'exécuter ce code et de voir si cela fonctionne même?
Outre l'utilisation des listes, si vous avez un ensemble de données volumineux, vous pouvez également utiliser des tableaux numpus qui permettent une multiplication sage d'élément simplement à l'aide de l'opérateur de multiplication comme suggéré par @mad physicist , ce que vous voulez essentiellement le produit scalaire. Donc, vous pouvez également faire, P> * code>. Ensuite, vous pouvez résumer les valeurs à l'aide de
np.sum code>. Vous trouverez ci-dessous un exemple utilisant un petit jeu de données.
a.dot(b)
Pourquoi pas a.dot (b) code>? Downvote pas à ne pas le mien, mais il est peu probable que vous obteniez une réponse significative d'un Downvoter qui ne veut pas partir un.
@Madphysiciste: bonne suggestion. Je vais l'ajouter :) Merci
Créer des listes à l'avance semble être ce que vous devez faire.
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]
Un conseil: évitez d'utiliser des fonctions intégrées et des noms de variables
Le nom de la variable après avoir fait cela, alors vous pouvez faire p> f_i code> ne devient pas le nom de la variable
F1 code> juste parce qu'il se trouve à proximité d'une définition d'une autre variable appelée
i code >. Ce que vous voulez faire est de calculer le nom de la variable en fonction de la valeur de
i code>. Le moyen de faire cela dans Python consiste à utiliser une liste:
f [1] code> (pas
F1 code >) a la valeur 2 (et pas 1, car les indices de liste sont à base de zéro). p>
En général, c'est une idée de recrue commune que vous pouvez avoir un index dans le nom de la variable. Cela provoque effectivement plus de problèmes que ce qu'il vaut, car les noms variables sont des chaînes. Outre la difficulté relative d'accéder à des variables par des noms générés dynamiquement, vous avez des choses telles que à cette fin, vous avez une structure de données appelée liste, ce qui vous permet d'accéder à des éléments à l'aide d'un entier unique entier. Vous pouvez stocker vos numéros dans une paire de listes: p> maintenant Vous pouvez accéder aux données Si vos données sont toujours associées comme ça, vous pouvez également choisir de refléter cela dans la structure. Au lieu d'avoir deux listes, vous pouvez choisir d'avoir une seule liste de deux tuples: p> maintenant ce que vous avez appelé La somme des produits que vous essayez de Calculer peut être calculé à partir d'une disposition des données: p> ou p> l'expression que nous passons au Si vous faites beaucoup d'analyse de données, vous voudrez peut-être examiner les bibliothèques de calcul de Python. Le plus fondamental de ceux-ci est numpy, ce qui vous permet de stocker des données dans des tableaux densément emballés et d'effectuer des opérations vectorisées rapides sur eux. P> Pour convertir une liste en une matrice: P> a_2 code> à venir après
a_10 code> et devoir décider si le nom de la variable est
a_10 Code> ou
A_0010 code>.
c [0] code>, ...,
c [4] code>, plutôt que
c_1 code>, ...,
c_5 code>. L'index est basé sur zéro. P>
c_1 code> avant le premier élément du premier tuple:
cf [0] [0] code>. De même,
f_5 code> sera le deuxième élément du dernier tuple:
cf [4] [1] code>. P>
Somme code> est appelée expression génératrice. Il serait normalement enfermé entre parenthèses, sauf lorsqu'il s'agit de l'argument unique à une fonction. L'expression donnera paresseusement le produit calculé de chaque paire d'éléments. P>
fc.prod(axis=1).sum()
une manière "pythonic" de le faire serait d'utiliser l'intégré zip () code>
et Somme () code>
fonctionne pour produire des paires de chaque terme et calculer le total.
f = [1, 2, 3, 4, 5] c = [6, 7, 8, 9, 10]
Au lieu de définir
fn, cn code> comme variables distinctes, ajoutez-les aux listes. Vous pouvez ensuite utiliser
somme code> et
zip code> pour itérer sur eux par paires.
Ne créez pas de variables distinctes. Utilisez des listes, de sorte que vous pouvez facilement référencer des valeurs individuelles (en utilisant l'indexation ou l'itération).
Fondamentalement, juste
somme (f [i] * c [i]) pour i in gamme (5)) code>, à condition que
f code> et
c code> est Listes de 5 éléments. Ou
somme (FI * CI pour fi, CI dans zip (f, c)) code>