добавьте элементы во вложенный список и выведите список python

#python

Вопрос:

Я хочу добавить

 distances
[array([2.0786226e-03, 3.9023757e-03, 3.4480095e-03, 5.1999092e-04], dtype=float32), array([0.0031136 , 0.00344056, 0.00739563, 0.0311079 ],
      dtype=float32), array([1.8880665e-03, 3.0295253e-03, 4.0802956e-03, 2.6324868e-02], dtype=float32), array([0.00330418, 0.00431347, 0.00802791, 0.00426304],
      dtype=float32)]
 

Желаемый Результат

 [0.00994899872, 0.04505769, 0.0353227554, 0.0199086]
 

Я попробовал следующее, но он добавляет все элементы и дает скалярное значение

 print(sum( sum(x) if isinstance(x, list) else x for x in L ))  
 

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

1. Что еще вы ожидали sum бы сделать?

Ответ №1:

Вы могли бы использовать numpy для этого, как

 import numpy as np

distances = np.array([[2.0786226e-03, 3.9023757e-03, 3.4480095e-03, 5.1999092e-04],
                     [0.0031136 , 0.00344056, 0.00739563, 0.0311079 ],
                     [1.8880665e-03, 3.0295253e-03, 4.0802956e-03, 2.6324868e-02],
                     [0.00330418, 0.00431347, 0.00802791, 0.00426304]],dtype=np.float32)

print(np.sum(distances,axis=1))
 

что дает желаемый результат

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

1. В моем массиве есть dtype=float32, которого нет в вашем массиве расстояний

2. Все подзапросы имеют dtype=np.float32

3. Там также они просто не остаются эксплицитными снаружи, как у вас, но вы могли бы проверить это самостоятельно, взяв расстояния[0], то есть массив float32, как и все остальные.

4. обратите внимание , что вы также можете определить каждый из массивов как 4-мерный массив с dtype=np.float32, и на расстояниях вы можете собрать их все вместе и выполнить ту же операцию, используя np,.sum , но это, конечно, зависит от вас.

Ответ №2:

Предполагая L distances , что ты был почти там:

 print([sum(x) if isinstance(x, list) else x for x in L ])  
 

Ответ №3:

Прежде чем мы продолжим, я хотел бы упомянуть, что вы должны указать, что это связано с numpy.

Зачем делать однострочный? Используйте простой цикл for. Возьмите первый пункт в каждом списке и добавьте их отдельно. Чтобы затем сохранить его, добавьте его в список и перейдите ко второму пункту. После того, как вы найдете рабочий код, попробуйте только сократить его. Это хорошая практика на python.

Ответ №4:

Поскольку у вас уже есть объекты numpy в вашем списке, вы можете суммировать эти объекты.

Массив объектов numpy имеет реализацию по элементам, поэтому вы можете суммировать:

 a = np.array([a1, a2, a3])
b = np.array([b1, b2, b3])
a   b
 

Результатом a b будет:

 [a1 b1, a2 b2, a3 b3]
 

Как упоминал @bruno, вы можете использовать встроенный метод numpy.sum , чтобы сделать это автоматически.