#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
, чтобы сделать это автоматически.