Суммирование по массиву, содержащему другие массивы

#python #numpy #loops #for-loop

#питон #тупица #петли #для-петли

Вопрос:

Я хотел бы подвести итог через массив, состоящий из других под-массивов.

 import numpy as np  a1 = np.array([1,2,3]) a2 = np.array([3,4,5]) a3 = np.array([6,7,8])  a = np.concatenate(([a1],[a2],[a3]))  print(len(a))  for i in range(1,len(a)): (1)  for j in i : (2)  for k in j : (3)  goal = np.sum(np.cos(k))  print(goal)       goal to achieve :    goal = cos(1) cos(2) cos(3)   goal = cos(3) cos(4) cos(5)   goal = cos(6) cos(7) cos(8)   

Я подумал о том , чтобы сначала зациклиться на массиве, содержащем все остальные подмассивы (1), затем для каждого подмассива (2) и, наконец, внутри каждого подмассива (3) .

Я получу ответную информацию :

 File "*****************", line 18, in lt;modulegt;  for j in i :  TypeError: 'int' object is not iterable  

В моей реальной проблеме у меня может быть более 3 поддиапазонов. Я думаю, что это можно сделать, но я все еще открываю для себя Python.

Ответ №1:

У вас слишком много уровней зацикливания. Вам просто нужен один цикл для перебора строк массива, затем вы можете суммировать эту строку.

 for row in a:  goal = np.sum(np.cos(row))  print(goal)  

Комментарии:

1. np.sum принимает аргумент оси, который намного быстрее, чем перебор строк

2. @PranavHosangadi Я подозревал, что там был один лайнер numpy, но я не очень хорошо знаю numpy. Я предлагаю вам опубликовать этот ответ.

3. Просто, прямолинейно. Большое вам спасибо за ваш ответ !

Ответ №2:

 In [212]: a1 = np.array([1,2,3])  ...: a2 = np.array([3,4,5])  ...: a3 = np.array([6,7,8])  ...:   ...: a = np.concatenate(([a1],[a2],[a3]))  ...:   

Полученный 2d массив:

 In [213]: a Out[213]:  array([[1, 2, 3],  [3, 4, 5],  [6, 7, 8]])  

cos каждого элемента:

 In [214]: np.cos(a) Out[214]:  array([[ 0.54030231, -0.41614684, -0.9899925 ],  [-0.9899925 , -0.65364362, 0.28366219],  [ 0.96017029, 0.75390225, -0.14550003]])  

сумма строк:

 In [215]: np.cos(a).sum(axis=1) Out[215]: array([-0.86583703, -1.35997393, 1.56857251])  

проще проверить, что это суммирование строк с:

 In [216]: a.sum(axis=1) Out[216]: array([ 6, 12, 21])  

С numpy этим лучше всего мыслить в терминах всего многомерного массива и действий, которые работают над всем этим или над конкретными измерениями. Это и быстрее, и в целом полезнее.

Комментарии:

1. Большое вам спасибо за это объяснение, я начинаю понимать, как работает numpy.

Ответ №3:

Вместо j in i того, чтобы писать j in a[i]

Комментарии:

1. Куда ты звонишь np.cos() ?

2. Ему не нужна сумма всего. Ему нужна сумма косинусов каждой строки.

3. О, значит, проблема возникает, когда вы пытаетесь cos, а в списке есть другой список?

4. Прочитайте часть вопроса после «цель для достижения».

5. Теперь я вижу, что не так