現在、vector3値がリストとして表されています。これらのようなvector3値の2つを減算する方法はありますか?
[2,2,2] - [1,1,1] = [1,1,1]
タプルを使用する必要がありますか?
それらのどれもこれらの型でこれらのオペランドを定義していない場合、代わりにそれを定義できますか?
そうでない場合は、新しいvector3クラスを作成する必要がありますか?
回答:
リスト内包に代わる方法は次のとおりです。マップはリスト(後者の引数)を繰り返し処理し、同時に実行し、それらの要素を引数として関数(最初の引数)に渡します。結果のリストを返します。
map(operator.sub, a, b)
このコードは構文が少ないため(私にとってはより美的です)、長さ5のリストでは明らかに40%高速です(bobinceのコメントを参照)。それでも、どちらのソリューションでも機能します。
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
arr1=[1,2,3]
arr2=[2,1,3]
ls=[arr2-arr1 for arr1,arr2 in zip(arr1,arr2)]
print(ls)
>>[1,-1,0]
この回答は、「通常の/簡単に理解できる」pythonicコードの書き方を示しています。
zip
誰もが知っているわけではないので、使用しないことをお勧めします。
ソリューションは、リスト内包表記と一般的な組み込み関数を使用します。
a = [2, 2, 2]
b = [1, 1, 1]
result = [a[i] - b[i] for i in range(len(a))]
Pythonの最も基本的な関数のみを使用するため、推奨されます
a = [2, 2, 2]
b = [1, 1, 1]
result = [x - b[i] for i, x in enumerate(a)]
a = [2, 2, 2]
b = [1, 1, 1]
result = list(map(lambda x, y: x - y, a, b))
これを試して:
list(array([1,2,3])-1)