亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

matplotlib 等高線圖中的條件函數變化

matplotlib 等高線圖中的條件函數變化

POPMUISE 2023-08-22 16:57:34
我想使用 2 變量函數 Z(X,Y) 生成等值線圖。但是,我想施加一個條件,當 X 小于/大于某個值時更改函數。這樣的更改將允許我僅使用單行plt.contour(即我不想創建兩個單獨定義的函數,這會導致使用兩個單獨的繪圖命令行)。我繼續遇到(我認為的)真理/邏輯錯誤。我的猜測是 numpy 網格網格的某些方面不符合函數的條件“切換”。下面附上顯示該概念的簡短代碼以及完整的回溯錯誤。如果有任何不清楚的地方,或者我提供的內容不足以解釋我的問題,請隨時在下面發表評論。import numpy as npimport matplotlib.pyplot as pltX = 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()```
查看完整描述

3 回答

?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

您可以簡單地使用numpy.where().
你必須通過:

  • 條件作為第一個參數

  • 如果條件為真,則從中選擇值作為第二個參數

  • 如果條件為假,則從中選擇值作為第三個參數

這樣,你的z()函數就變成了:

def?z(x,?y):
????return?np.where(x?<?20,
????????????????????np.sin(x)?+?np.cos(y),
????????????????????np.tan(x*y))

生成的情節:

https://img2.sycdn.imooc.com/64e478ad00019e7c05700450.jpg

查看完整回答
反對 回復 2023-08-22
?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

一切都很好,但你必須改變比較np.any(x<20)。這意味著如果 x 的任何元素大于 20。np.all如果您想在數組的每個元素都滿足條件時執行此操作,也可以使用 ,


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 np.any(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()


查看完整回答
反對 回復 2023-08-22
?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

numpy 數組中的真實性測試是按元素進行的,


import numpy as np

X =  np.array([1,2,3,4])

print(X<3)

輸出:[真真假假]


您可以使用.all()或.any(),具體取決于您是否希望所有或任何元素滿足條件


print((X<3).all())

輸出:假


查看完整回答
反對 回復 2023-08-22
  • 3 回答
  • 0 關注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號