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 Réponses :
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]))
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
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))
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.
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]
Le 3ème et le 2ème partageaient le même
i. Voulez-vous dire23,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.arrayest vague. Essayez également d'utiliser le style d'indexationarr [23,0].