Прямо сейчас у меня есть значения vector3, представленные в виде списков. есть ли способ вычесть 2 из этих значений типа vector3, например
[2,2,2] - [1,1,1] = [1,1,1]
Стоит ли использовать кортежи?
Если ни один из них не определяет эти операнды для этих типов, могу ли я определить его вместо этого?
Если нет, следует ли мне создать новый класс vector3?
Если у вас есть списки a и b, вы можете:
map(int.__sub__, a, b)
Но, вероятно, не стоит. Никто не узнает, что это значит.
источник
map(float.__sub__, a, b)
работает. Спасибо за совет!Я бы рекомендовать NumPy в колодце
Он не только быстрее выполняет векторные математические вычисления, но и имеет массу удобных функций.
Если вы хотите что-то еще быстрее для одномерных векторов, попробуйте vop
Он похож на MatLab, но бесплатный и прочее. Вот пример того, что бы вы сделали
from numpy import matrix a = matrix((2,2,2)) b = matrix((1,1,1)) ret = a - b print ret >> [[1 1 1]]
Бум.
источник
np.array
было бы более простым решениемЕсли у вас есть два списка с именами «a» и «b», вы можете:
[m - n for m,n in zip(a,b)]
источник
import numpy as np a = [2,2,2] b = [1,1,1] np.subtract(a,b)
источник
Немного другой класс 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)
источник
Если вы планируете выполнять более простых однострочников, было бы лучше реализовать свой собственный класс и переопределить соответствующие операторы, поскольку они применимы к вашему случаю.
Взято из математики в 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
источник
Для того, кто раньше писал код на Pycharm, он возрождает и других.
import operator Arr1=[1,2,3,45] Arr2=[3,4,56,78] print(list(map(operator.sub,Arr1,Arr2)))
источник
Сочетание
map
иlambda
функция в Python является хорошим решением для такого рода проблемы:a = [2,2,2] b = [1,1,1] map(lambda x,y: x-y, a,b)
zip
функция - еще один хороший выбор, как продемонстрировал @UncleZeivисточник
arr1=[1,2,3] arr2=[2,1,3] ls=[arr2-arr1 for arr1,arr2 in zip(arr1,arr2)] print(ls) >>[1,-1,0]
источник
Этот ответ показывает, как писать "нормальный / простой для понимания" питонический код.
Я предлагаю не использовать, так
zip
как не все об этом знают.В решениях используются списки и стандартные встроенные функции.
Альтернатива 1 (рекомендуется):
a = [2, 2, 2] b = [1, 1, 1] result = [a[i] - b[i] for i in range(len(a))]
Рекомендуется, так как он использует только самые основные функции Python
Альтернатива 2:
a = [2, 2, 2] b = [1, 1, 1] result = [x - b[i] for i, x in enumerate(a)]
Альтернатива 3 (как упомянуто BioCoder ):
a = [2, 2, 2] b = [1, 1, 1] result = list(map(lambda x, y: x - y, a, b))
источник
Попробуй это:
list(array([1,2,3])-1)
источник