導航:首頁 > 編程語言 > python歐式舉例

python歐式舉例

發布時間:2023-03-18 01:34:00

python計算每兩個向量之間的距離並保持到矩陣中

在很多演算法中都會涉及到求向量歐式距離,例如機器學習中的KNN演算法,就需要對由訓練集A和測試集B中的向量組成的所有有序對(Ai,Bi),求出Ai和Bi的歐式距離。這樣的話就會帶來一個二重的嵌套循環,在向量集很大時效率不高。
這里介紹如何將這一過程用矩陣運算實現。
假設有兩個三維向量集,用矩陣表示:

A=[a11a12a21a22a31a32]

B=⎡⎣⎢⎢b11b12b13b21b22b23b31b32b33⎤⎦⎥⎥

要求A,B兩個集合中的元素兩兩間歐氏距離。

先求出ABT:

ABT=⎡⎣⎢⎢⎢⎢⎢∑k=13ak1bk1∑k=13ak2bk1∑k=13ak1bk2∑k=13ak2bk2∑k=13ak1bk3∑k=13ak2bk3⎤⎦⎥⎥⎥⎥⎥

然後對A和BT分別求其中每個向量的模平方,並擴展為2*3矩陣:

Asq=⎡⎣⎢⎢⎢⎢⎢∑k=13(ak1)2∑k=13(ak2)2∑k=13(ak1)2∑k=13(ak2)2∑k=13(ak1)2∑k=13(ak2)2⎤⎦⎥⎥⎥⎥⎥

Bsq=⎡⎣⎢⎢⎢⎢⎢∑k=13(bk1)2∑k=13(bk1)2∑k=13(bk2)2∑k=13(bk2)2∑k=13(bk3)2∑k=13(bk3)2⎤⎦⎥⎥⎥⎥⎥

然後:

Asq+Bsq−2ABT=⎡⎣⎢⎢⎢⎢⎢∑k=13(ak1−bk1)2∑k=13(ak2−bk1)2∑k=13(ak1−bk2)2∑k=13(ak2−bk2)2∑k=13(ak1−bk3)2∑k=13(ak2−bk3)2⎤⎦⎥⎥⎥⎥⎥

將上面這個矩陣一開平方,就得到了A,B向量集兩兩間的歐式距離了。
下面是Python實現:
import numpy
def EuclideanDistances(A, B):
BT = B.transpose()
vecProd = A * BT
SqA = A.getA()**2
sumSqA = numpy.matrix(numpy.sum(SqA, axis=1))
sumSqAEx = numpy.tile(sumSqA.transpose(), (1, vecProd.shape[1]))
SqB = B.getA()**2
sumSqB = numpy.sum(SqB, axis=1)
sumSqBEx = numpy.tile(sumSqB, (vecProd.shape[0], 1))
SqED = sumSqBEx + sumSqAEx - 2*vecProd
ED = (SqED.getA())**0.5
return numpy.matrix(ED)

② 有大神能給寫下用python怎麼算歐式股票期權的隱含波動率么

用BS model計算歐式call option的implied volatility。
稍微修改一下也可以算put option。計算結果可以和期權計算器上的結果對比。

③ 怎樣用python計算兩個向量的歐式距離

L2距離就是二范數,用norm試一下。
比如兩個1D向量分別為a,b,則歐式距離可以表示為:
norm(a-b), 相當於
sqrt(sum((a-b).^2))

④ python是什麼樣的編程語言

Python是什麼?

Python是一種開放源代碼的腳本編程語言,這種腳本語言特別強調開發速度和代碼的清晰程度。它可以用來開發各種程序,從簡單的腳本任務到復雜的、面向對象的應用程序都有大顯身手的地方。Python還被當作一種入門程序員最適合掌握的優秀語言,因為它免費、面向對象、擴展性強同時執行嚴格的編碼標准。

Python是免費的

Guido van Rossum於1990年開始開發Python,最初的目的無非是一個自娛的項目。作為Monty Python的飛行馬戲團節目的愛好者,他給自己開發的這種編程語言起了現在這個古怪的名字,中文意思就是大蟒。Python最初設計為一種取代 Amoeba分布式操作系統ABC的腳本語言,但不久這種新型編程語言很快就發展成可以解決相當多問題的利器,現在更引入到了多種平台。

Guido目前還是Python軟體基金會的主席。該組織按照GNU公共許可協議的要求擁有Python的知識產權和許可權。Python可以用在多種平台上,包括Windows、Macintosh和各種常見的UNIX系統。另外針對PalmOS 和微軟的Pocket PC的相應版本也在開發中。

Python品質超群

雖然Python常用來創建簡單的腳本,但它採用的編程技術可不簡單,比如面向對象編碼、套接字、線程和GUI等等。假如你是一位剛入流的程序員,這些特性顯然對你太有幫助了,因為你可以很快熟悉有益的編程語法和編碼實踐,之後再學習其他語言,比如Java或者C++等引入的技術概念就容易多了。腳本可以單獨執行,不過,你還可以通過類文件和各類對象類型以充分利用這種語言的強大功能。

Python區別於其他面向對象語言的關鍵有兩點。首先,Python強調空格和編碼結構,從而令開發者的代碼具有良好的重用性。其次,執行腳本之前無須編譯Python代碼,這就是它為什麼被當作腳本語言的原因。

Python易於擴展

Python語言有一個引人注目的優勢,它可以針對語言無法完成功能的函數調用函數庫。Python還具有有些相當有用的工具幫助開發出復雜的應用程序。其中最常用的就是Tkinker,這種工具可以實現跨平台的GUI開發。另一種wxPython工具則是對wxWindows跨平台C++框架的擴展。WxPython目前已經支持Windows和Linux平台。Python Imaging Library可以讓Python創建、打開、編輯和修改圖象,包括.gif、.jpeg和.png等。為了了解常用的Python擴展和應用,你不妨訪問下The Vaults of Parnassus。

Python自身還可以嵌入到其他編程語言中。最常見的就是[url=http://www.jython.org/]Jython[url],這是一種用Java編寫的Python解釋器。這樣你就可以同時利用兩種語言的優點。你還可以在強大的Java應用程序框架中結合Python清晰的語法來創建出依賴於兩種語言庫的應用程序。

編碼標准

嚴格的Python語法是初級程序員忽略這一強大編程語言的最主要原因。和大多數的其他面向Web腳本語言不同的是,Python的空白排版不依賴於括弧或者分號來表示語句結束,換行和佔位符用來描述代碼的可視結果。這種編程方式乍看之下令人感到厭煩,但卻對你另有莫大的好處,這就是代碼的可靠性。Python這種結構化是建立在下面的理論之上:開發者的工作時間是機構財產中最有價值的財富。一旦你習慣了編寫Python代碼的規則。實際上你就習慣了一種內建的編碼標准。這也正是大多數Python開發者所依賴的標准。

獲取Python

你可以從http://www.python.org或者各類平台上的Python版本。ActiveState網站也發布用於 Windows、Linux和Solaris等平台的Python庫。

最簡單的Python代碼

下面我們舉例說明Python。假設你目前使用的是Windows系統,而且已經安裝了Python,請首先啟動IDLE,也就是Python的GUI。現在處於Python Shell中(如果你在UNIX類型的系統上就需要鍵入 python類型指示你的Python可執行文件)。接著在">>>"提示符下鍵入:
>>>print "Hello World"

這個大家耳熟能詳的程序就在屏幕上顯示出結果,你還可以如下所示給變數賦值:
>>>myvar = 42
>>>print myvar

在上例中會顯示結果42。

如果你開發的腳本無須在Python Shell 中直接輸入Python就更有用了。程序清單A就包含了一個Hello World腳本的示例,其中編寫了if-else語句。

你可以在命令行上鍵入scriptname.py來執行自己的腳本(py是Python 腳本的標准文件擴展名)。你應該能看到正確的顯示結果。清單A中,跟著if和else之後由佔位符縮排的語句就是空白格式化的一部分。

這些很簡單的示例演示了Python清晰的語法。為了了解更多有關Python編程的信息,你不妨查看下Python網站上的初學者指南。如果你不習慣於上網瀏覽,那麼你還可以閱讀O'Reilly 和New Riders 出版的有關圖書。比如How to Think Like a Computer Scientist : Learning with Python和Python Essential Reference。

小結

不論你是一位初學編程語言以圖增長自己知識技能的入門程序員還是為了謀取更大代碼可靠性的Perl高手,你都會發現Python是一種相當靈活和強大的編程語言。它可以開發出各種各樣的應用程序,從功能齊備的郵件列表軟體到各種跨平台的GUI應用程序一應俱全。

上面用到的清單 A [re: xyb]

# List A
# (If you are on an UNIX type system you may have to modify the first line to point to
your Python executable.)

#!/usr/bin/pythonmyvar = "Hello World"if myvar == "Hello World": print myvarelse: print "myvar does not equal Hello World"

[精華] 另外,我也介紹一本書 [re: xyb]
(enthusiast)
02-09-02 11:21

Bruce Eckel的Thinking in Python,可以從這里下載。
Bruce Eckel已經出版的Thinking in Java和Thinking in C++可都是鼎鼎大名。他正在寫的有Thinking in Python和Thinking in Pattern,不知道什麼時候可以出版。

其他Bruce Eckel的著作下載目錄:Bruce Eckel's Free Electronic Books

⑤ 121 11 個案例掌握 Python 數據可視化--星際探索

星空是無數人夢寐以求想了解的一個領域,遠古的人們通過肉眼觀察星空,並制定了太陰歷,指導農業發展。隨著現代科技發展,有了更先進的設備進行星空的探索。本實驗獲取了美國國家航空航天局(NASA)官網發布的地外行星數據,研究及可視化了地外行星各參數、尋找到了一顆類地行星並研究了天體參數的相關關系。
輸入並執行魔法命令 %matplotlib inline, 設置全局字型大小,去除圖例邊框,去除右側和頂部坐標軸。

本數據集來自 NASA,行星發現是 NASA 的重要工作之一,本數據集搜集了 NASA 官網發布的 4296 顆行星的數據,本數據集欄位包括:

導入數據並查看前 5 行。

截至 2020 年 10 月 22 日 全球共發現 4296 顆行星,按年聚合並繪制年度行星發現數,並在左上角繪制 NASA 的官方 LOGO 。

從運行結果可以看出,2005 年以前全球行星發現數是非常少的,經計算總計 173 顆,2014 和 2016 是行星發現成果最多的年份,2016 年度發現行星 1505 顆。

對不同機構/項目/計劃進行聚合並降序排列,繪制發現行星數目的前 20 。

2009 年至 2013 年,開普勒太空望遠鏡成為有史以來最成功的系外行星發現者。在一片天空中至少找到了 1030 顆系外行星以及超過 4600 顆疑似行星。當機械故障剝奪了該探測器對於恆星的精確定位功能後,地球上的工程師們於 2014 年對其進行了徹底改造,並以 K2 計劃命名,後者將在更短的時間內搜尋宇宙的另一片區域。

對發現行星的方式進行聚合並降序排列,繪制各種方法發現行星的比例,由於排名靠後的幾種方式發現行星數較少,因此不顯示其標簽。

行星在宇宙中並不會發光,因此無法直接觀察,行星發現的方式多為間接方式。從輸出結果可以看出,發現行星主要有以下 3 種方式,其原理如下:

針對不同的行星質量,繪制比其質量大(或者小)的行星比例,由於行星質量量綱分布跨度較大,因此採用對數坐標。

從輸出結果可以看出,在已發現的行星中,96.25% 行星的質量大於地球。(圖中橫坐標小於 e 的紅色面積非常小)

通過 sns.distplot 介面繪制全部行星的質量分布圖。

從輸出結果可以看出,所有行星質量分布呈雙峰分布,第一個峰在 1.8 左右(此處用了對數單位,表示大約 6 個地球質量),第二個峰在 6.2 左右(大概 493 個地球質量)。

針對不同發現方式發現的行星,繪制各行星的公轉周期和質量的關系。

從輸出結果可以看出:徑向速度(Radial Velocity)方法發現的行星在公轉周期和質量上分布更寬,而凌日(Transit)似乎只能發現公轉周期相對較短的行星,這是因為兩種方法的原理差異造成的。對於公轉周期很長的行星,其運行到恆星和觀察者之間的時間也較長,因此凌日發現此類行星會相對較少。而徑向速度與其說是在發現行星,不如說是在觀察恆星,由於恆星自身發光,因此其觀察機會更多,發現各類行星的可能性更大。

針對不同發現方式發現的行星,繪制各行星的距離和質量的關系。

從輸出結果可以看出,凌日和徑向速度對距離較為敏感,遠距離的行星大多是通過凌日發現的,而近距離的行星大多數通過徑向速度發現的。原因是:近距離的行星其引力對恆星造成的擺動更為明顯,因此更容易觀察;當距離較遠時,引力作用變弱,擺動效應減弱,因此很難藉助此方法觀察到行星。同時,可以觀察到當行星質量更大時,其距離分布相對較寬,這是因為雖然相對恆星的距離變長了,但是由於行星質量的增加,相對引力也同步增加,恆星擺動效應會變得明顯。

將所有行星的質量和半徑對數化處理,繪制其分布並擬合其分布。
由於:

因此,從原理上質量對數與半徑對數應該是線性關系,且斜率為定值 3 ,截距的大小與密度相關。

從輸出結果可以看出:行星質量和行星半徑在對數變換下,具有較好的線性關系。輸出 fix_xy 數值可知,其關系可以擬合出如下公式:

擬合出曲線對應的行星平均密度為:

同樣的方式繪制恆星質量與半徑的關系。

從輸出結果可以看出,恆星與行星的規律不同,其質量與半徑在對數下呈二次曲線關系,其關系符合以下公式:

同樣的方式研究恆星表面重力加速度與半徑的關系。

從輸出結果可以看出,恆星表面對數重力加速度與其對數半徑呈現較好的線性關系:

以上我們分別探索了各變數的分布和部分變數的相關關系,當數據較多時,可以通過 pd.plotting.scatter_matrix 介面,直接繪制各變數的分布和任意兩個變數的散點圖分布,對於數據的初步探索,該介面可以讓我們迅速對數據全貌有較為清晰的認識。

通過行星的半徑和質量,恆星的半徑和質量,以及行星的公轉周期等指標與地球的相似性,尋找諸多行星中最類似地球的行星。

從輸出結果可以看出,在 0.6 附近的位置出現了一個最大的圓圈,那就是我們找到的類地行星 Kepler - 452 b ,讓我們了解一下這顆行星:

數據顯示,Kepler - 452 b 行星公轉周期為 384.84 天,半徑為 1.63 地球半徑,質量為 3.29 地球質量;它的恆星為 Kepler - 452 半徑為太陽的 1.11 倍,質量為 1.04 倍,恆星方面數據與太陽相似度極高。
以下內容來自網路。 開普勒452b(Kepler 452b) ,是美國國家航空航天局(NASA)發現的外行星, 直徑是地球的 1.6 倍,地球相似指數( ESI )為 0.83,距離地球1400光年,位於為天鵝座。
2015 年 7 月 24 日 0:00,美國國家航空航天局 NASA 舉辦媒體電話會議宣稱,他們在天鵝座發現了一顆與地球相似指數達到 0.98 的類地行星開普勒 - 452 b。這個類地行星距離地球 1400 光年,繞著一顆與太陽非常相似的恆星運行。開普勒 452 b 到恆星的距離,跟地球到太陽的距離相同。NASA 稱,由於缺乏關鍵數據,現在不能說 Kepler - 452 b 究竟是不是「另外一個地球」,只能說它是「迄今最接近另外一個地球」的系外行星。

在銀河系經緯度坐標下繪制所有行星,並標記地球和 Kepler - 452 b 行星的位置。

類地行星,是人類寄希望移民的第二故鄉,但即使最近的 Kepler-452 b ,也與地球相聚 1400 光年。

以下通過行星的公轉周期和質量兩個特徵將所有行星聚為兩類,即通過訓練獲得兩個簇心。
定義函數-計算距離
聚類距離採用歐式距離:

定義函數-訓練簇心
訓練簇心的原理是:根據上一次的簇心計算所有點與所有簇心的距離,任一點的分類以其距離最近的簇心確定。依此原理計算出所有點的分類後,對每個分類計算新的簇心。

定義函數預測分類
根據訓練得到的簇心,預測輸入新的數據特徵的分類。

開始訓練
隨機生成一個簇心,並訓練 15 次。

繪制聚類結果
以最後一次訓練得到的簇心為基礎,進行行星的分類,並以等高面的形式繪制各類的邊界。

從運行結果可以看出,所有行星被分成了兩類。並通過上三角和下三角標注了每個類別的簇心位置。
聚類前
以下輸出了聚類前原始數據繪制的圖像。

⑥ Python 計算三維空間某點距離原點的歐式距離

1、點擊「開始」——「ArcGIS」——「ArcMap」,啟動ArcMap程序,並添加兩個點要素類到地圖上。

⑦ python編寫歐式二叉樹的問題

所以我就遇到了一下幾個問題:
1、該怎麼把二叉樹各個節點連起來?
2、怎麼定義內部數據成員?
3、如何實例化左右孩子?

在網上也沒找到比較簡單比較通用的Python二叉樹類實現,所以我花了點時間自己寫一個。
[python] view plain 在CODE上查看代碼片派生到我的代碼片
class Tree:
def __init__(self, val = '#', left = None, right = None):
self.val = val
self.left = left
self.right = right

#前序構建二叉樹
def FrontBuildTree(self):
temp = input('Please Input: ')
node = Tree(temp)
if(temp != '#'):
node.left = self.FrontBuildTree()
node.right = self.FrontBuildTree()
return node#因為沒有引用也沒有指針,所以就把新的節點給返回回去

#前序遍歷二叉樹
def VisitNode(self):
print(self.val)
if(self.val != '#'):
self.left.VisitNode()
self.right.VisitNode()

if __name__ == '__main__':
root = Tree()
root = root.FrontBuildTree()
root.VisitNode()

閱讀全文

與python歐式舉例相關的資料

熱點內容
漢語詞典pdf下載 瀏覽:351
android公網ip 瀏覽:611
要塞1地圖放哪個文件夾 瀏覽:848
凡科建站怎麼弄伺服器 瀏覽:939
蘋果手機怎麼設置app播放 瀏覽:202
下載網站源碼用什麼瀏覽器 瀏覽:241
六線譜pdf 瀏覽:156
linuxmysqlsock 瀏覽:239
人教版數學pdf下載 瀏覽:460
文檔安全加密系統 瀏覽:491
數控銑床編程簡單數字 瀏覽:788
編程電纜如何重啟 瀏覽:121
myqq命令行發消息 瀏覽:365
日產逍客怎麼使用app升窗 瀏覽:503
安卓系統怎麼快速刪除微信內容 瀏覽:653
csharppython 瀏覽:409
程序員脖子按摩儀 瀏覽:563
小米桌面文件夾亂碼怎麼回事 瀏覽:858
點歌台app怎麼連接 瀏覽:318
大學電腦編程學什麼好 瀏覽:348