내 프로젝트에서 Add
또는 Mul
개체를 생성 할 때 evaluate=false
을 사용해야합니다. 이 경우 이러한 객체에 대한 동등성 검사를 적용 할 때 문제가 발생합니다. 문제는 논쟁의 순서 때문입니다.Python-Sympy evaluate = False 일 때 식 평형 검사 문제
아래의 예를 고려하십시오 :
k2=Mul(*[x,y,2],evaluate=False)
k1=Mul(*[x,2,y],evaluate=False)
print k1==k2
결과는 (x,y,2)
을하고 k1.args
가 (x,2,y)
입니다 false
k2.args
같습니다. 비교 결과 튜플이 동일한 지 확인하는 동안 false
을 반환합니다. 원하는 결과를 얻을 수있는 방법이 있습니까? I는 (순서를 반대로하고 검사 등) 튜플에 어떤 동작을 세우면 k1
및 k2
가 Mul
개체 상이한로부터 형성 될 때
또한,이 경우에는 실패 (같은 경우 k1.args
= 2*x,y
및 k2.args
= 2*y,x
)
여기서는 정렬을 사용할 수 없습니다.이 경우 Add([x+y,z],evaluate=False)
과 Add([x+z,y],evaluate=False)
은 두 가지 다른 표현식입니다. 또한 evalaute=True
을 사용하는 경우,이 경우 Add([x+y],x])
과 Add([2*x+y])
은 같지 않으므로 원하지 않습니다.
나는이 질문을 게시하여 어떤 사람이 저를 비교할 수있는 방법을 제안 할 수 있도록했습니다. 네, 곱셈은 항상 교환 적입니다. 내 질문에 편집 된 섹션을 참조하십시오 – gsagrawal