我的目標(biāo)是創(chuàng)建兩個隨機數(shù)據(jù)數(shù)組并檢查它們是否落入半徑為 1 的圓內(nèi),使用公式 x^2 + y^2 < 1。落入圓內(nèi)的應(yīng)繪制為藍色圓圈那些落在圓圈外的應(yīng)該繪制為黃色圓圈。我設(shè)法創(chuàng)建了數(shù)組,檢查它們是否在圓圈內(nèi),然后繪制它們。import matplotlib.pyplot as pltimport numpy as npplots = 100#creates x-coordinatesdataOne = np.random.random(size = plots)#creates y-coordinatesdataTwo = np.random.random(size = plots)circle = plt.Circle((0,0), 1, alpha = 0.1)plt.gca().add_patch(circle)plt.xlim(0, 2)plt.ylim(0, 2)squareDataOne = dataOne ** 2squareDataTwo = dataTwo ** 2squareRootData = np.sqrt(squareDataOne + squareDataTwo)insideCircle = squareRootData < 1for values in insideCircle: if values == True: plt.plot(squareDataOne, squareDataTwo, 'bo') else: plt.plot(squareDataOne, squareDataTwo, 'yo')plt.show() 我的問題在于情節(jié)本身。繪制時,我有落在圓圈外的點仍然是藍色的。圖中根本沒有出現(xiàn)黃色圓圈。任何關(guān)于我的代碼錯誤的建議表示贊賞。
2 回答

阿晨1998
TA貢獻2037條經(jīng)驗 獲得超6個贊
你應(yīng)該試試
for i in range(len(insideCircle)):
if insideCircle[i]:
plt.plot(dataOne[i], dataTwo[i], 'bo')
else:
plt.plot(dataOne[i], dataTwo[i], 'yo')
plt.show()
編輯:您應(yīng)該繪制dataOne和dataTwo而不是squareDataOne和squareDataTwo(在代碼中更改)

慕工程0101907
TA貢獻1887條經(jīng)驗 獲得超5個贊
您需要更多地考慮向量化的術(shù)語,并了解更多有關(guān)切片 numpy 數(shù)組的知識。對此有一個非常優(yōu)雅的解決方案:
is_inside = np.sqrt(dataOne**2 + dataTwo**2) < 1
plt.plot(dataOne[is_inside], dataTwo[is_inside], 'bo')
plt.plot(dataOne[~is_inside], dataTwo[~is_inside], 'yo')
添加回答
舉報
0/150
提交
取消