Как складывать вектора, представленные из-за tuplas в Пайтоне?

Давайте говорить, что я должен складывать 2 вектора n-размеров. Каковой состоит форма pytonica в том, чтобы складывать их прямо?

Например в R^3, но не будучи ограничен в R^3,

a = (123.45, 23.45, 1.0)
b = (45.678, 56.78, 5.0)

(Получать (169.128, 80.23, 6.0))

7
задан 03.12.2015, 08:37
6 ответов

Если ты пробуешь очевидное, ты получаешь генератор:

>>> (sum(x) for x in zip(a, b))
<generator object <genexpr> at 0x7faf248e20f8>

AsГ - который ты можешь конвертировать в tupla прямо:

>>> tuple(sum(x) for x in zip(a, b))
(169.128, 80.23, 6.0)

В любом случае, я рекомендую тебе в Вашем месте использовать NumPy :

>>> import numpy as np
>>> a = np.array((123.45, 23.45, 1.0))
>>> b = np.array((45.678, 56.78, 5.0))
>>> a + b
array([ 169.128,   80.23 ,    6.   ])
12
ответ дан 24.11.2019, 15:08

Другая форма используя их mГіdulo operator и itertools:

from itertools import izip, starmap
from operator import add

add_tuples = lambda a,b: tuple(starmap(add, izip(a, b)))

Используя обеспеченный пример:

>>> a = (123.45, 23.45, 1.0)
>>> b = (45.678, 56.78, 5.0)
>>> print(add_tuples(a, b))
(169.128, 80.23, 6.0)
>>>
2
ответ дан 24.11.2019, 15:08

Другая форма pythonica :

a = (123.45, 23.45, 1.0)
b = (45.678, 56.78, 5.0)

c = tuple(map(lambda x, y: x + y, a, b))
print(c)

map берет элемент каждого из iterables, которые проходят с ним, что позволяет избавлять от zip.

В Пайтоне 3.x, map возвращает один generator.

В Пайтоне 2.x podrГ, - чтобы использоваться itertools.imap вместо map, чтобы иметь всегда связный результат и не производить промежуточный список.

Оказавшиеся

(169.128, 80.23, 6.0)
1
ответ дан 24.11.2019, 15:08

Пробуй с:

S = [i+j for i,j in zip(a,b)]
2
ответ дан 24.11.2019, 15:08
  • 1
    Потому что они поместили ему-1? – Javier Cárdenas 15.02.2016, 23:48
  • 2
    Ответ хороший и отличный от того, что было сказано до настоящего времени, нет raz и # 243; n, чтобы голосовать за негатив. и #161; Спасибо Габи! – astrojuanlu 16.02.2016, 09:06

В принципе:

>>> map(sum, zip(a, b))

Итак, в python3 ты получишь генератор, так что, если ты захочешь получить tupla или список:

>>> tuple(map(sum, zip(a, b))
0
ответ дан 24.11.2019, 15:08

Язык программирования Пайтон - один наиболее использованные в научной и воспитательной области и это проистекает Вашим книжным магазинам и специфическим APIs для всего связанного с научным вычислением, я рекомендую тебе вводить SciPy и проверять эту большую галерею очень интересных книжных магазинов, между которыми, находится NumPy, который уже они рекомендовали тебя, и Matplotlib, который также очень полезный, для которого ты хочешь сделать, только - вопрос исследования немного в Вашей документации и видеть, который приближается больше к тому, что ты хочешь сделать.

Помни, что одно из преимуществ Пайтона - большое количество книжных магазинов, которые они решают многий из проблем, с которыми мы сталкиваемся в воспитательной и трудовой области. Каждый раз, когда ты был должен делать что-то в специфическом средстве конечно уже кто-то создал книжный магазин, который, использовав ее очень вероятно, помогал бы тебе приуменьшать время, чтобы решать проблему.

1
ответ дан 24.11.2019, 15:08

Теги

Похожие вопросы