
文章插圖
用量子計(jì)算模擬器ProjectQ生成隨機(jī)數(shù),并用pytest進(jìn)行單元測(cè)試與覆蓋率測(cè)試,以及基于flake8的編碼規(guī)范測(cè)試目錄
技術(shù)背景隨機(jī)數(shù)的應(yīng)用量子計(jì)算與隨機(jī)數(shù)基于pytest的python單元測(cè)試框架量子計(jì)算產(chǎn)生隨機(jī)數(shù)注意!!!pytest測(cè)試安裝pytest庫(kù)pytest單元測(cè)試用例撰寫(xiě)pytest初始化配置文件pytest生成html格式報(bào)告pytest覆蓋率測(cè)試使用flake8進(jìn)行python編碼規(guī)范檢查總結(jié)概要版權(quán)聲明參考鏈接技術(shù)背景本文中主要包含有三個(gè)領(lǐng)域的知識(shí)點(diǎn):隨機(jī)數(shù)的應(yīng)用、量子計(jì)算模擬產(chǎn)生隨機(jī)數(shù)與基于pytest框架的單元測(cè)試與覆蓋率測(cè)試,這里先簡(jiǎn)單分別介紹一下背景知識(shí) 。
隨機(jī)數(shù)的應(yīng)用在上一篇介紹量子態(tài)模擬采樣的算法中,我們就使用到了隨機(jī)數(shù),隨機(jī)數(shù)在各種蒙特卡洛方法與數(shù)值計(jì)算中,扮演著非常重要的角色 。在金融領(lǐng)域,隨機(jī)數(shù)則是在加密算法中扮演重要角色,其風(fēng)險(xiǎn)在于,如果隨機(jī)數(shù)可被預(yù)測(cè),那么惡意用戶(hù)就可以利用這一特點(diǎn),破解對(duì)稱(chēng)加密甚至是非對(duì)稱(chēng)加密的算法(非對(duì)稱(chēng)加密如RSA算法的私鑰的挑選其實(shí)也有可能使用到隨機(jī)數(shù)) 。在python代碼中,可以通過(guò)調(diào)用random庫(kù)或者numpy.random庫(kù)進(jìn)行隨機(jī)數(shù)的生成,僅需要通過(guò)如下的代碼即可實(shí)現(xiàn):
import randomrandom_number = random.random() # 產(chǎn)生[0,1)之間的均勻隨機(jī)數(shù)import numpy as nprandom_array = random.randn(10) # 產(chǎn)生10個(gè)隨機(jī)數(shù)并存儲(chǔ)到np格式的一維數(shù)組中這些庫(kù)所產(chǎn)生的隨機(jī)數(shù),往往被認(rèn)為是不安全的隨機(jī)數(shù),其主要特點(diǎn)是通過(guò)隨機(jī)數(shù)生成算法,結(jié)合硬件的一些獨(dú)有編號(hào)來(lái)產(chǎn)生一系列數(shù)串 。但是隨機(jī)數(shù)生成算法一般都是已知的,因此還是有一定的潛在風(fēng)險(xiǎn) 。有一個(gè)python庫(kù)函數(shù)叫secrets可以產(chǎn)生”安全隨機(jī)數(shù)”,其特點(diǎn)在于不僅利用了一些硬件系統(tǒng)獨(dú)有信息,如ip和MAC等,主要還利用了系統(tǒng)熵源來(lái)生成隨機(jī)數(shù),增強(qiáng)了所產(chǎn)生隨機(jī)數(shù)的不可預(yù)測(cè)性 。關(guān)于secrets的使用方法,可以參考其官方文檔 。但是,即使是這里所謂的安全隨機(jī)數(shù),也并不是真隨機(jī)數(shù),真隨機(jī)數(shù)的產(chǎn)生不依賴(lài)于算法 。
量子計(jì)算與隨機(jī)數(shù)前面寫(xiě)過(guò)一篇博客介紹兩比特量子系統(tǒng)的模擬,讀者可以從中了解到量子計(jì)算的一些基本原理與模擬實(shí)現(xiàn) 。而另一篇關(guān)于量子線(xiàn)路模擬的博客,則介紹了關(guān)于開(kāi)源量子計(jì)算框架ProjectQ的一些基本使用方法,在這篇文章中我們也會(huì)使用到 。通過(guò)量子硬件,我們可以直接讀取一系列的隨機(jī)串,由于這些隨機(jī)串是由硬件直接給出來(lái)的結(jié)果,不是通過(guò)算法來(lái)生成的,因此是完成不可預(yù)測(cè)的,被稱(chēng)為”真隨機(jī)數(shù)” 。
基于pytest的python單元測(cè)試框架在使用python編程實(shí)現(xiàn)算法時(shí),需要對(duì)算法函數(shù)或者類(lèi)進(jìn)行功能驗(yàn)證,這就需要寫(xiě)測(cè)試用例 。python第三方庫(kù)pytest提供了非常好的自動(dòng)化測(cè)試的功能,配合html插件和覆蓋率測(cè)試插件,還可以進(jìn)行更多的測(cè)試以及更好的展示測(cè)試的結(jié)果 。
量子計(jì)算產(chǎn)生隨機(jī)數(shù)量子計(jì)算是基于量子疊加與量子糾纏兩種特性進(jìn)行計(jì)算的方案,其結(jié)合量子算法的復(fù)雜性?xún)?yōu)勢(shì),在量子處理器上可以實(shí)現(xiàn)經(jīng)典計(jì)算機(jī)無(wú)法在有效時(shí)間內(nèi)完成的任務(wù),一般稱(chēng)之為量子優(yōu)越性 。量子疊加是對(duì)量子比特重要特性的一個(gè)總結(jié),如下圖所示(圖片來(lái)自于參考鏈接1),區(qū)分于經(jīng)典比特,量子比特不僅可以表示0和1,還可以表示處于0和1之間的狀態(tài),比如0.5,0.2243等等 。這些狀態(tài)我們不能直接讀取,在硬件上我們只能夠讀取到0或者1兩種狀態(tài),這跟經(jīng)典比特是一樣的 。區(qū)別在于,即使我們不改變量子比特的狀態(tài),不同的測(cè)試卻會(huì)給出不同的結(jié)果,而0.5等中間狀態(tài),則表示的是出現(xiàn)0或者1狀態(tài)分別的概率 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專(zhuān)業(yè)人士給予相關(guān)指導(dǎo)!
「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- js實(shí)現(xiàn)文件下載功能 html圖片按鈕代碼
- 自己制作一個(gè)網(wǎng)站的方法 html5制作網(wǎng)頁(yè)教程
- 浪漫的html表白源代碼 網(wǎng)頁(yè)表白代碼大全
- html頁(yè)面獲取url參數(shù) jquery獲取url中的參數(shù)有哪些
- 講解html中title標(biāo)簽的作用 html標(biāo)題代碼
- 網(wǎng)頁(yè)設(shè)計(jì)菜單欄導(dǎo)航實(shí)例 html5導(dǎo)航欄代碼
- 分享文件轉(zhuǎn)換工具類(lèi) html轉(zhuǎn)換成word文檔
- html左圖右文布局方法 html左右布局模板
- c語(yǔ)言二維數(shù)組定義和賦值 隨機(jī)數(shù)c語(yǔ)言代碼
- html簡(jiǎn)易計(jì)算器代碼 javascript計(jì)算器代碼
