-1
votes

Comment calculer cette somme de manière concise?

J'essaie de mettre en somme dans une modélisation dans Python. La formule mathématique est:

somme (f_i * c_i) pour i = 1 jusqu'à ce que je = 5

Comment puis-je mettre dans cette somme en Python sans taper à chaque trimestre? J'ai défini F1 à F5 et C1 à C5 avant.


3 commentaires

Au lieu de définir fn, cn comme variables distinctes, ajoutez-les aux listes. Vous pouvez ensuite utiliser somme et zip 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)) , à condition que f et c est Listes de 5 éléments. Ou somme (FI * CI pour fi, CI dans zip (f, c))


7 Réponses :


0
votes

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])]))


4 commentaires

f [1: 5] 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 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



0
votes

Un moyen de faire une sommation de nombreuses variables consiste à les stocker dans une liste et de boucler sur la liste à l'aide d'une boucle pour boucle. Je suppose que vous avez tous les C et f déclaré. XXX


1 commentaires

Avez-vous essayé d'exécuter ce code et de voir si cela fonctionne même?



0
votes

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 * 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. xxx pré>

comme suggéré par @mad physicist , ce que vous voulez essentiellement le produit scalaire. Donc, vous pouvez également faire, P>

a.dot(b)


2 commentaires

Pourquoi pas a.dot (b) ? 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



0
votes

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]


1 commentaires

Un conseil: évitez d'utiliser des fonctions intégrées et des noms de variables



0
votes

Le nom de la variable f_i ne devient pas le nom de la variable F1 juste parce qu'il se trouve à proximité d'une définition d'une autre variable appelée i . Ce que vous voulez faire est de calculer le nom de la variable en fonction de la valeur de i . Le moyen de faire cela dans Python consiste à utiliser une liste: xxx

après avoir fait cela, f [1] (pas F1 ) a la valeur 2 (et pas 1, car les indices de liste sont à base de zéro).

alors vous pouvez faire xxx


0 commentaires

0
votes

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 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>.

à 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> xxx pré>

maintenant Vous pouvez accéder aux données c [0] code>, ..., c [4] code>, plutôt que c_1 code>, ..., c_5 code>. L'index est basé sur zéro. P>

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> xxx pré>

maintenant ce que vous avez appelé 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>

La somme des produits que vous essayez de Calculer peut être calculé à partir d'une disposition des données: p> xxx pré>

ou p> xxx pré>

l'expression que nous passons au 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>

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>

fc.prod(axis=1).sum()


0 commentaires

0
votes

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]


0 commentaires