2
votes

Itérer sur un tableau et effectuer des calculs sur des éléments

J'ai un tableau que je veux additionner des éléments spécifiques tout en l'itérant. J'ai du mal à trouver un moyen de le faire avec loop. La forme du tableau est (25,25)

print(array[23][0]+array[23][1]) # 159159 + 148887 = 308046
print(array[22][0]+array[22][1]+array[22][2]) #132633 + 124073 + 131357 = 388063
print(array[21][0]+array[21][1]+array[21][2]+array[21][3]) # 92843 +  86851 + 91950 + 98232 = 369876 

Je veux imprimer les résultats comme ci-dessous pour chaque itération

array 
  [ 92843,  86851,  91950,  98232,  83329,  94591,  88962,  97020,
        107113,  98452, 103242, 106442, 123032, 119063, 112971, 114715,
        108654, 114856, 109872, 124583, 120518, 112815, 120780, 127831,
        147174],
       [132633, 124073, 131357, 140331, 119041, 135131, 127089, 138601,
        153019, 140647, 147489, 152061, 175761, 170090, 161388, 163879,
        155221, 164080, 156960, 177976, 172169, 161165, 172544, 182617,
        210249],
       [159159, 148887, 157629, 168397, 142849, 162157, 152507, 166321,
        183623, 168776, 176986, 182473, 210913, 204108, 193665, 196655,
        186265, 196896, 188352, 213571, 206602, 193398, 207052, 219140,
        252298]

Présenter chaque élément comme array [i] [j] , comme vous pouvez le voir dans chaque itération i - 1, et la "longueur" de j a augmenté de un.
Puis-je utiliser la boucle pour effectuer cette tâche? Merci!


3 commentaires

Le 3ème et le 2ème partageaient le même i . Voulez-vous dire 23,22,21 ? Et pourquoi avez-vous des difficultés à parcourir l'index?


@ knh190 oui vous avez raison, j'ai édité la question


Si vous utilisez numpy , indiquez-le. array est vague. Essayez également d'utiliser le style d'indexation arr [23,0] .


3 Réponses :


4
votes

Essayez ceci:

0    # last row, no elements summed
16   # 16 = 16
23   # 11 + 12 = 23
21   # 6 + 7 + 8 = 21
10   # 1 + 2 + 3 + 4 = 10

Par exemple, si

array = [[ 1,  2,  3,  4,  5],
         [ 6,  7,  8,  9, 10],
         [11, 12, 13, 14, 15],
         [16, 17, 18, 19, 20],
         [21, 22, 23, 24, 25]]

la sortie serait

for i, sub in enumerate(reversed(array)):
    print(sum(sub[:i]))


3 commentaires

Merci, mais j'ai reçu une erreur sur la deuxième ligne TypeError: l'objet 'numpy.int64' n'est pas appelable


@Osca je ne peux pas reproduire ça. Êtes-vous sûr d'avoir correctement saisi le code?


Oui, je copie-collez le code. Même pour l'exemple de tableau que vous avez créé, j'ai reçu la même erreur. J'utilise python3



3
votes

Vous voudrez peut-être simplement le np.tril , suivi d'un np.sum (_, axis = 0) . Cela donnera la somme de chaque ligne du triangle inférieur de la matrice . Facilement modifié pour donner le triangle supérieur, si c'est ce dont vous avez besoin.

print(np.sum(np.tril(array), axis=0))


3 commentaires

Merci, mais je veux imprimer la somme du triangle de chaque calque, pas seulement la somme du triangle supérieur entier


L'axe doit être en dehors de np.tril .


@Osca c'est ce que cela renvoie. J'ai modifié pour rendre cela plus clair.



1
votes
In [661]: arr = np.arange(1,17).reshape(4,4)
In [662]: arr
Out[662]: 
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16]])

In [666]: for i in range(3,-1,-1):
     ...:     c = arr[i,:4-i]
     ...:     print(c.sum(), c)
     ...:     
13 [13]
19 [ 9 10]
18 [5 6 7]
10 [1 2 3 4]

0 commentaires