『壹』 求助python2.7中如何在圖形界面中畫出根號。
為什麼我這里顯示正常?
from Tkinter import *
root = Tk()
root.title("Calculator")
root.geometry("170x170")
root.resizable(width = False, height = False) #建議加這句
Entry(root, width = 20).place(x=10, y=10)
Button(root, text=("√"),width=2).place(x=130,y=98)
root.mainloop()
『貳』 python 如何畫出KD數
簡單的KNN演算法在為每個數據點預測類別時都需要遍歷整個訓練數據集來求解距離,這樣的做法在訓練數據集特別大的時候並不高效,一種改進的方法就是使用kd樹來存儲訓練數據集,這樣可以使KNN分類器更高效。
KD樹的主要思想跟二叉樹類似,我們先來回憶一下二叉樹的結構,二叉樹中每個節點可以看成是一個數,當前節點總是比左子樹中每個節點大,比右子樹中每個節點小。而KD樹中每個節點是一個向量(也可能是多個向量),和二叉樹總是按照數的大小劃分不同的是,KD樹每層需要選定向量中的某一維,然後根據這一維按左小右大的方式劃分數據。在構建KD樹時,關鍵需要解決2個問題:(1)選擇向量的哪一維進行劃分(2)如何劃分數據。第一個問題簡單的解決方法可以是選擇隨機選擇某一維或按順序選擇,但是更好的方法應該是在數據比較分散的那一維進行劃分(分散的程度可以根據方差來衡量)。好的劃分方法可以使構建的樹比較平衡,可以每次選擇中位數來進行劃分,這樣問題2也得到了解決。下面是建立KD樹的Python代碼:
def build_tree(data, dim, depth):
"""
建立KD樹
Parameters
----------
data:numpy.array
需要建樹的數據集
dim:int
數據集特徵的維數
depth:int
當前樹的深度
Returns
-------
tree_node:tree_node namedtuple
樹的跟節點
"""
size = data.shape[0]
if size == 0:
return None
# 確定本層劃分參照的特徵
split_dim = depth % dim
mid = size / 2
# 按照參照的特徵劃分數據集
r_indx = np.argpartition(data[:, split_dim], mid)
data = data[r_indx, :]
left = data[0: mid]
right = data[mid + 1: size]
mid_data = data[mid]
# 分別遞歸建立左右子樹
left = build_tree(left, dim, depth + 1)
right = build_tree(right, dim, depth + 1)
# 返回樹的根節點
return Tree_Node(left=left,
right=right,
data=mid_data,
split_dim=split_dim)
對於一個新來的數據點x,我們需要查找KD樹中距離它最近的節點。KD樹的查找演算法還是和二叉樹查找的演算法類似,但是因為KD樹每次是按照某一特定的維來劃分,所以當從跟節點沿著邊查找到葉節點時候並不能保證當前的葉節點就離x最近,我們還需要回溯並在每個父節點上判斷另一個未查找的子樹是否有可能存在離x更近的點(如何確定的方法我們可以思考二維的時候,以x為原點,當前最小的距離為半徑畫園,看是否與劃分的直線相交,相交則另一個子樹中可能存在更近的點),如果存在就進入子樹查找。
當我們需要查找K個距離x最近的節點時,我們只需要維護一個長度為K的優先隊列保持當前距離x最近的K個點。在回溯時,每次都使用第K短距離來判斷另一個子節點中是否存在更近的節點即可。下面是具體實現的python代碼:
def search_n(cur_node, data, queue, k):
"""
查找K近鄰,最後queue中的k各值就是k近鄰
Parameters
----------
cur_node:tree_node namedtuple
當前樹的跟節點
data:numpy.array
數據
queue:Queue.PriorityQueue
記錄當前k個近鄰,距離大的先輸出
k:int
查找的近鄰個數
"""
# 當前節點為空,直接返回上層節點
if cur_node is None:
return None
if type(data) is not np.array:
data = np.asarray(data)
cur_data = cur_node.data
# 得到左右子節點
left = cur_node.left
right = cur_node.right
# 計算當前節點與數據點的距離
distance = np.sum((data - cur_data) ** 2) ** .5
cur_split_dim = cur_node.split_dim
flag = False # 標記在回溯時是否需要進入另一個子樹查找
# 根據參照的特徵來判斷是先進入左子樹還是右子樹
if data[cur_split_dim] > cur_data[cur_split_dim]:
tmp = right
right = left
left = tmp
# 進入子樹查找
search_n(left, data, queue, k)
# 下面是回溯過程
# 當隊列中沒有k個近鄰時,直接將當前節點入隊,並進入另一個子樹開始查找
if len(queue) < k:
neg_distance = -1 * distance
heapq.heappush(queue, (neg_distance, cur_node))
flag = True
else:
# 得到當前距離數據點第K遠的節點
top_neg_distance, top_node = heapq.heappop(queue)
# 如果當前節點與數據點的距離更小,則更新隊列(當前節點入隊,原第k遠的節點出隊)
if - 1 * top_neg_distance > distance:
top_neg_distance, top_node = -1 * distance, cur_node
heapq.heappush(queue, (top_neg_distance, top_node))
# 判斷另一個子樹內是否可能存在跟數據點的距離比當前第K遠的距離更小的節點
top_neg_distance, top_node = heapq.heappop(queue)
if abs(data[cur_split_dim] - cur_data[cur_split_dim]) < -1 * top_neg_distance:
flag = True
heapq.heappush(queue, (top_neg_distance, top_node))
# 進入另一個子樹搜索
if flag:
search_n(right, data, queue, k)525354555657
以上就是KD樹的Python實踐的全部內容,由於本人剛接觸python不久,可能實現上並不優雅,也可能在演算法理解上存在偏差,如果有任何的錯誤或不足,希望各位賜教。
『叄』 python怎麼表示指數
其中有兩個非常漂亮的指數函數圖就是用python的matplotlib畫出來的。這一期,我們將要介紹如何利用python繪制出如下指數函數。
圖 1 a>1圖 1 a>1
我們知道當0 ,指數函數 是單調遞減的,當a>1 時,指數函數是單調遞增的。所以我們首先要定義出指數函數,將a值做不同初始化
import math
...
def exponential_func(x, a): #定義指數函數
y=math.pow(a, x)
return y
然後,利用numpy構造出自變數,利用上面定義的指數函數來計算出因變數
X=np.linspace(-4, 4, 40) #構造自變數組
Y=[exponential_func(x) for x in X] #求函數值
有了自變數和因變數的一些散點,那麼就可以模擬我們平時畫函數操作——描點繪圖,利用下面代碼就可以實現
import math
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist #導入坐標軸加工模塊
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
fig=plt.figure(figsize=(6,4)) #新建畫布
ax=axisartist.Subplot(fig,111) #使用axisartist.Subplot方法創建一個繪圖區對象ax
fig.add_axes(ax) #將繪圖區對象添加到畫布中
def exponential_func(x, a=2): #定義指數函數
y=math.pow(a, x)
return y
X=np.linspace(-4, 4, 40) #構造自變數組
Y=[exponential_func(x) for x in X] #求函數值
ax.plot(X, Y) #繪制指數函數
plt.show()
圖 2 a=2
圖2雖簡單,但麻雀雖小五臟俱全,指數函數該有都有,接下來是如何讓其看起來像我們在作圖紙上面畫的那麼美觀,這里重點介紹axisartist 坐標軸加工類,在的時候我們已經用過了,這里就不再多說了。我們只需要在上面代碼後面加上一些代碼來將坐標軸好好打扮一番。
圖 3 a>1 完整代碼# -*- coding: utf-8 -*-圖 3 a>1 完整代碼# -*- coding: utf-8 -*-"""Created on Sun Feb 16 10:19:23 2020project name:@author: 帥帥de三叔"""import mathimport numpy as npimport matplotlib.pyplot as pltimport mp
『肆』 求助! python3 如何畫出函數圖像!!
更好的方法就是:Python(x,y), 科學計算包,完美解決你的一切安裝問題。去它官網下吧。至於怎麼用,一堆的文檔,看看就會了。
『伍』 python中fig,ax=plt.subplots什麼意思
fig,ax=plt.subplots的意思是將plt.subplots()函數的返回值賦值給fig和ax兩個變數。
plt.subplots()是一個函數,返回一個包含figure和axes對象的元組,因此,使用fig,ax=plt.subplots()將元組分解為fig和ax兩個變數。
通常,我們只用到ax:
fig,ax = plt.subplots(nrows=2, ncols=2)
axes = ax.flatten()
把父圖分成2*2個子圖,ax.flatten()把子圖展開賦值給axes,axes[0]便是第一個子圖,axes[1]是第二個。
(5)python怎麼畫出隱函數擴展閱讀
在matplotlib中,整個圖像為一個Figure對象。在Figure對象中可以包含一個或者多個Axes對象。每個Axes(ax)對象都是一個擁有自己坐標系統的繪圖區域。所屬關系如下:
def subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True,
subplot_kw=None, gridspec_kw=None, **fig_kw):
參數:
nrows,ncols:子圖的行列數。
sharex, sharey:
設置為 True 或者 『all』 時,所有子圖共享 x 軸或者 y 軸,
設置為 False or 『none』 時,所有子圖的 x,y 軸均為獨立,
設置為 『row』 時,每一行的子圖會共享 x 或者 y 軸,
設置為 『col』 時,每一列的子圖會共享 x 或者 y 軸。
返回值
fig:matplotlib.figure.Figure對象
ax:子圖對象(matplotlib.axes.Axes)或者是他的數組
『陸』 畫出y =sinx python 程序怎麼寫
from math import pi, sin
import matplotlib.pyplot as plt
x = [i/1000*pi for i in range(1000)]
y = [sin(i) for i in x]
plt.plot(x, y)
plt.show()
『柒』 無所不能的python編程是怎麼快速畫圖的呢
python繪圖工具有很多,常用的turtle海龜繪圖體系,只要引入import turtle就可以無需安裝
『捌』 python 怎麼樣隱式函數調用
最常用的是在類定義的方法,給一個property的裝飾器,可以安裝調用屬性的方式調用
『玖』 如何用Python編寫密碼隱藏函數
def use_list(): str_before=input("請輸入明文:") str_change=str_before.lower() str_list=list(str_change) str_list_change=str_list i=0 whilei
『拾』 不能直接寫出函數的表達式 怎麼在python里畫函數圖象呢
不寫出y=f(x)這樣的表達式,由隱函數的等式直接繪制圖像,以x²+y²+xy=1的圖像為例,使用sympy間接調用matplotlib工具的代碼和該二次曲線圖像如下(注意python里的乘冪符號是**而不是^,還有,python的sympy工具箱的等式不是a==b,而是a-b或者Eq(a,b),這幾點和matlab的區別很大)
直接在命令提示行的裡面運行代碼的效果
from sympy import *;
x,y=symbols('x y');
plotting.plot_implicit(x**2+y**2+x*y-1);