파이썬에서 2 개의 목록 빼기
지금은 목록으로 표현 된 vector3 값이 있습니다. vector3 값 중 2 개를 빼는 방법이 있습니까?
[2,2,2] - [1,1,1] = [1,1,1]
튜플을 사용해야합니까?
이들 중 어느 것도 이러한 유형에 대해 이러한 피연산자를 정의하지 않으면 대신 정의 할 수 있습니까?
그렇지 않은 경우 새 vector3 클래스를 만들어야합니까?
이것이 자주 수행하는 작업이고 다른 작업으로 끝나는 경우 이와 같은 경우를 처리하는 클래스를 만들거나 Numpy 와 같은 일부 라이브러리를 사용하는 것이 좋습니다 .
그렇지 않으면 zip 내장 함수 와 함께 사용되는 목록 이해를 찾으십시오 .
[a_i - b_i for a_i, b_i in zip(a, b)]
여기에 목록 이해에 대한 대안이 있습니다. 매핑은 목록 (후자의 인수)을 반복하면서 동시에 수행하고 해당 요소를 함수 (첫 번째 인수)에 인수로 전달합니다. 결과 목록을 반환합니다.
map(operator.sub, a, b)
이 코드는 구문이 적기 때문에 (나에게 더 심미적입니다), 길이가 5 인 목록의 경우 40 % 더 빠릅니다 (bobince의 의견 참조). 그래도 두 솔루션 모두 작동합니다.
목록이 a와 b 인 경우 다음을 수행 할 수 있습니다.
map(int.__sub__, a, b)
하지만 그렇게해서는 안됩니다. 아무도 그것이 무엇을 의미하는지 알 수 없습니다.
벡터 수학을 수행하는 데 더 빠를뿐만 아니라 수많은 편의 기능도 있습니다.
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]]
팔.
'a'와 'b'라는 두 개의 목록이있는 경우 다음을 수행 할 수 있습니다. [m - n for m,n in zip(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)
단순한 하나 이상의 라이너를 수행 할 계획이라면 자체 클래스를 구현하고 케이스에 적용되는 적절한 연산자를 재정의하는 것이 좋습니다.
에서 촬영 파이썬에서 수학 :
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
import numpy as np
a = [2,2,2]
b = [1,1,1]
np.subtract(a,b)
Pycharm에서 코딩했던 사람에게는 다른 사람도 부활시킵니다.
import operator
Arr1=[1,2,3,45]
Arr2=[3,4,56,78]
print(list(map(operator.sub,Arr1,Arr2)))
Python 의 map
및 lambda
함수 조합은 이러한 종류의 문제에 대한 좋은 해결책입니다.
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]
이 시도:
list(array([1,2,3])-1)
참고 URL : https://stackoverflow.com/questions/534855/subtracting-2-lists-in-python
'IT TIP' 카테고리의 다른 글
OnClickListener 내부에서 많은 것에 액세스 할 수 없습니다. 어떻게 접근합니까? (0) | 2020.10.17 |
---|---|
JQuery DataTable에서 기본적으로 모든 행을 표시하는 방법 (0) | 2020.10.17 |
0/1 대신 부울 유형에 대해 Y / N을 저장하도록 최대 절전 모드 (JPA 사용)를 구성합니다. (0) | 2020.10.17 |
ImportError : BeautifulSoup이라는 모듈이 없습니다. (0) | 2020.10.17 |
동적으로 양식 생성 및 제출 (0) | 2020.10.17 |