#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. Теперь я вижу, что не так