2 변수 함수 Z (X, Y)를 사용하여 등고선도를 생성하고 싶습니다. 그러나 X가 특정 값보다 작거나 클 때 함수를 변경하는 조건을 부과하고 싶습니다. 이러한 변경을 통해 한 plt.contour
줄만 사용할 수 있습니다 (즉 , 두 개의 개별 플로팅 명령 줄을 사용하는 두 개의 개별적으로 정의 된 함수를 만들고 싶지 않습니다 ).
나는 계속해서 (내가 믿는 것) 진실 / 논리적 오류에 부딪친 다. 내 생각 엔 numpy meshgrid의 일부 측면이 함수의 조건부 "스위치"를 준수하지 않는다는 것입니다. 아래 첨부는 전체 Traceback 오류와 함께 개념을 표시하는 짧은 코드입니다. 불분명 한 것이 있거나 제공 한 내용이 내 문제를 설명하기에 충분하지 않은 경우 아래에 자유롭게 의견을 말하십시오.
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0,50,100)
Y = np.linspace(0,50,100)
X, Y = np.meshgrid(X,Y)
def z(x,y):
if x < 20:
return np.sin(x) + np.cos(y)
else:
return np.tan(x * y)
Z = z(X,Y)
plt.contourf(X, Y, Z)
plt.xlabel('x')
plt.ylabel('y')
plt.colorbar()
ValueError Traceback (most recent call last)
<ipython-input-29-7e200be093e6> in <module>
16
17
---> 18 Z = z(X,Y)
19
20 plt.figure(figsize=(8,6))
<ipython-input-29-7e200be093e6> in z(x, y)
9
10 def z(x,y):
---> 11 if x < 20:
12 return np.sin(x) + np.cos(y)
13
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()```
간단히 사용할 수 있습니다 numpy.where()
.
통과해야합니다 :
이런 식으로 z()
함수는 다음과 같습니다.
def z(x, y):
return np.where(x < 20,
np.sin(x) + np.cos(y),
np.tan(x*y))
생성 된 플롯 :
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다