Итерировать по массиву и производить расчеты по элементам - PullRequest
0 голосов
/ 22 января 2019

У меня есть массив, в котором я хочу суммировать определенные элементы при итерации по нему. Я изо всех сил пытаюсь найти способ сделать это с помощью цикла. Форма массива составляет (25,25)

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]

Я хочу распечатать результаты, как показано ниже для каждой итерации

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 

Представляя каждый элемент как array[i][j], как вы можете видеть на каждой итерации i - 1, и «длина» j увеличивается на единицу.
Могу ли я использовать цикл для выполнения этой задачи? Спасибо!

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Вы можете просто захотеть np.tril, а затем np.sum(_, axis=0). Это даст сумму каждой строки нижнего треугольника матрицы . Легко изменить, чтобы получить верхний треугольник, если это то, что вам нужно.

print(np.sum(np.tril(array), axis=0))
0 голосов
/ 22 января 2019
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 голосов
/ 22 января 2019

Попробуйте:

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

Например, если

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

, то результат будет

0    # last row, no elements summed
16   # 16 = 16
23   # 11 + 12 = 23
21   # 6 + 7 + 8 = 21
10   # 1 + 2 + 3 + 4 = 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...