Подтвердить что ты не робот

Вычитание 2 списков в Python

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

[2,2,2] - [1,1,1] = [1,1,1]

Должен ли я использовать кортежи?

Если ни один из них не определяет эти операнды для этих типов, могу ли я определить его вместо?

Если нет, должен ли я создать новый класс vector3?

4b9b3361

Ответ 1

Если это то, что вы часто делаете, и с разными операциями, вы, вероятно, должны создать класс для обработки таких случаев или лучше использовать некоторую библиотеку, например Numpy.

В противном случае найдите список понятий, используемый с zip встроенная функция:

[a_i - b_i for a_i, b_i in zip(a, b)]

Ответ 2

Здесь альтернатива спискам. Карта выполняет итерацию по списку (последним аргументам), делая это симулятивно и передает свои элементы в качестве аргументов функции (первый аргумент). Он возвращает результирующий список.

map(operator.sub, a, b)

Этот код, потому что имеет меньше синтаксиса (что для меня более эстетично) и, по-видимому, на 40% быстрее для списков длины 5 (см. комментарий bobince). Тем не менее, любое решение будет работать.

Ответ 3

Я бы рекомендовал NumPy, а также

Он не только ускоряет выполнение векторной математики, но также имеет тонну удобных функций.

Если вы хотите что-то еще быстрее для 1d векторов, попробуйте vop

Это похоже на MatLab, но бесплатное и прочее. Вот пример того, что вы будете делать

from numpy import matrix
a = matrix((2,2,2))
b = matrix((1,1,1))
ret = a - b
print ret
>> [[1 1 1]]

Boom.

Ответ 4

Если ваши списки - a и b, вы можете сделать:

map(int.__sub__, a, b)

Но вы, вероятно, не должны. Никто не узнает, что это значит.

Ответ 5

Посмотрите NumPy пакет для python.

Ответ 6

Если у вас есть два списка с именем "a" и "b", вы можете сделать: [m - n for m,n in zip(a,b)]

Ответ 7

Немного другой класс Vector.

class Vector( object ):
    def __init__(self, *data):
        self.data = data
    def __repr__(self):
        return repr(self.data) 
    def __add__(self, other):
        return tuple( (a+b for a,b in zip(self.data, other.data) ) )  
    def __sub__(self, other):
        return tuple( (a-b for a,b in zip(self.data, other.data) ) )

Vector(1, 2, 3) - Vector(1, 1, 1)

Ответ 8

Если вы планируете выполнять больше простых прошивок, было бы лучше реализовать свой собственный класс и переопределить соответствующие операторы, как они применяются к вашему делу.

Взято из Математика в Python:

class Vector:

  def __init__(self, data):
    self.data = data

  def __repr__(self):
    return repr(self.data)  

  def __add__(self, other):
    data = []
    for j in range(len(self.data)):
      data.append(self.data[j] + other.data[j])
    return Vector(data)  

x = Vector([1, 2, 3])    
print x + x

Ответ 9

Если вы хотите получить результат в списке:

list(numpy.array(list1)-numpy.array(list2))

если не удалить список.

Ответ 10

import numpy as np
a = [2,2,2]
b = [1,1,1]
np.subtract(a,b)

Ответ 11

Попробуйте следующее:

list(array([1,2,3])-1)