操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    數(shù)據(jù)導(dǎo)入是所有數(shù)模編程的第一步,比你想象的更重要。先要學會一種未必最佳,但是通用、安全、簡單、好學的方法?!盒“椎臄?shù)學建模課 @ 』帶你從數(shù)模小白成為國賽達人。1. 數(shù)據(jù)導(dǎo)入是所有數(shù)模編程的第一步

    編程求解一個數(shù)模問題,問題總會涉及一些數(shù)據(jù)。

    有些數(shù)據(jù)是在題目的文字描述中給出的,有些數(shù)據(jù)是通過題目的附件文件下載或指定網(wǎng)址提供的,還有些數(shù)據(jù)是需要自己搜集的。不論是哪種方式獲得的數(shù)據(jù),也不論哪種類型的問題和算法,首先都是要把這些數(shù)據(jù)以適當?shù)姆绞胶透袷綄?dǎo)入到程序中。

    如果數(shù)據(jù)格式有問題,輕則讀取數(shù)據(jù)時發(fā)生錯誤,要浪費時間去查找和解決,在數(shù)模競賽中就會讓人非常焦躁。數(shù)據(jù)錯誤還是輕的嗎?對,重則讀取數(shù)據(jù)有錯誤,程序卻在繼續(xù)運行,得到了錯誤的結(jié)果,這在數(shù)模競賽中就更糟糕了。你可能都不知道發(fā)生了錯誤,就算感覺有問題也不會把錯誤直接鎖定到數(shù)據(jù)導(dǎo)入部分,結(jié)果不停地去修改其它模塊,直到把正確的模塊也搞錯了,最后無可救藥。

    因此,確保數(shù)模編程第一步“數(shù)據(jù)導(dǎo)入”的順利完成,比原先的想象更重要。

    語言中數(shù)據(jù)導(dǎo)入的方法很多。對于數(shù)學建模問題編程來說,選擇什么方法最好呢?答案是:沒有最好的,只有最合適的。對于不同的問題,不同的算法,以及所調(diào)用工具包的不同實現(xiàn)方法,對于數(shù)據(jù)就會有不同的要求。另外,賽題所給數(shù)據(jù)文件中的數(shù)據(jù)組織方式不同,也需要使用不同的方法來導(dǎo)入數(shù)據(jù)。

    那么好了,既然是要具體問題具體分析,這不跟沒說一樣嗎?這正是本文希望回答的問題,雖然針對不同問題的最佳的數(shù)據(jù)導(dǎo)入方法也不同,但我們先要學會一種未必最佳,但是通用、安全、簡單、好學的方法。

    歡迎關(guān)注『小白的數(shù)學建模課 @ 』,持續(xù)更新中

    2. 在程序中直接向變量賦值

    直接在程序中向變量賦值,是雖然笨拙但最簡單的方法,也許還是最可靠的方法——如果你沒有敲錯鍵盤的話。

    確實,把直接賦值作為數(shù)據(jù)導(dǎo)入方法來介紹,實在是不好意思說出口。但是,對于數(shù)模競賽這種特殊的需求,直接賦值的方法還是十分常用的,而且完全符合簡單、實用、可靠的要求。

    不過,直接賦值也并非我們想的那么簡單,還是值得認真地談一談。

    2.1 為什么直接賦值?

    絕大部分數(shù)學建模教材中的例程,都是使用直接賦值的方法導(dǎo)入數(shù)據(jù)。很大比例的博客例程,包括本系列的大多數(shù)案例,也都是在程序中直接賦值的。

    其原因在于,一是為了保證程序的完整性,復(fù)制粘貼回車就能得到運行結(jié)果,不需要復(fù)制數(shù)據(jù)文件等操作,就避免了由此引起的各種錯誤;二是為了把讀者的注意力聚焦在主要的知識點,避免干擾;三是使例程更加直觀易懂,便于理解例程的算法。

    這些原因也都是直接賦值的優(yōu)點。那么,這些優(yōu)點不也正是數(shù)模競賽編程活動的痛點嗎?沒錯,這就是直接賦值方法在數(shù)學建模培訓(xùn)和數(shù)模競賽編程的實踐中廣泛流行的原因。

    2.2 直接賦值的問題與注意事項

    但是,即使在數(shù)模競賽編程中,直接賦值也會有幾個問題。

    一是某些問題不能使用直接賦值方法。這主要是大數(shù)據(jù)的問題,數(shù)據(jù)量或數(shù)據(jù)文件的數(shù)量極大,已經(jīng)不能使用直接賦值實現(xiàn)了。

    二是一些問題雖然可以直接賦值,但很容易出錯。這主要是數(shù)據(jù)量很大數(shù)據(jù)結(jié)構(gòu)讀取文件,或者數(shù)據(jù)結(jié)構(gòu)、類型比較復(fù)雜的問題。

    例如,多元分析、時間序列、數(shù)據(jù)統(tǒng)計類的題目可能都有很大的數(shù)據(jù)量,在附件中提供數(shù)據(jù)文件。這時如果在使用直接賦值導(dǎo)入數(shù)據(jù),不再是敲鍵盤了,而是從文件中把數(shù)據(jù)復(fù)制粘貼到程序中。

    這時要特別注意的問題是:

    文件中的數(shù)據(jù)分隔符是什么,空格還是逗號,與變量賦值的格式要求是否一致?即使文件中的數(shù)據(jù)分隔符看上去是空格,也需要檢查到底是空格還是制表符,是一個空格還是幾個空格?文件中的數(shù)據(jù)有沒有錯漏等異常?這在讀取文件中可以通過程序檢查、識別和處理,在復(fù)制粘貼時就要人工處理了。

    三是數(shù)據(jù)量不大的問題,完全可以用直接賦值導(dǎo)入數(shù)據(jù),但也會由于疏忽大意而出錯。

    這倒不是說敲錯鍵盤了,而是由于例程不一定是把數(shù)據(jù)賦值作為獨立模塊處理的,而是分散在算法的過程中進行賦值。同學在使用和修改例程時時,就很容易忘記修改算法過程中的變量賦值。這種情況屢見不鮮,有時是因為對程序沒有搞明白,忽略了算法步驟中的某個變量;更多時候是忙中出錯,在反復(fù)調(diào)試和更換數(shù)據(jù)時暈頭轉(zhuǎn)向,只顧了修改開始的數(shù)據(jù)而疏忽了后面的數(shù)據(jù)。

    java中從文件讀取數(shù)據(jù)_怎么讀取數(shù)據(jù)寄存器數(shù)據(jù)_數(shù)據(jù)結(jié)構(gòu)讀取文件

    養(yǎng)成數(shù)據(jù)導(dǎo)入模塊化的習慣,才能避免這一類的疏忽:

    將數(shù)據(jù)導(dǎo)入模塊作為單獨的函數(shù)。如果不愿意使用數(shù)據(jù)導(dǎo)入函數(shù),則要把數(shù)據(jù)導(dǎo)入部分集中寫成一段,放在程序的起始部分。不要把問題本身的數(shù)據(jù)導(dǎo)入與算法所需的參數(shù)賦值混淆,分為兩個獨立的函數(shù)或段落。

    例程 1:將數(shù)據(jù)導(dǎo)入作為單獨的函數(shù)

    # 子程序:定義優(yōu)化問題的目標函數(shù)
    def cal_Energy(X, nVar, mk): # m(k):懲罰因子
        p1 = (max(0, 6*X[0]+5*X[1]-320))**2
        p2 = (max(0, 10*X[0]+20*X[1]-7027)**2
        fx = -(10*X[0]+9*X[1])
        return fx+mk*(p1+p2)
    ?
    # 子程序:模擬退火算法的參數(shù)設(shè)置
    def ParameterSetting():
        tInitial = 100.0            # 設(shè)定初始退火溫度(initial temperature)
        tFinal  = 1                 # 設(shè)定終止退火溫度(stop temperature)
        alfa    = 0.98              # 設(shè)定降溫參數(shù),T(k)=alfa*T(k-1)
        nMarkov = 100               # Markov鏈長度,也即內(nèi)循環(huán)運行次數(shù)
        youcans = 0.5               # 定義搜索步長,可以設(shè)為固定值或逐漸縮小
        return tInitial, tFinal, alfa, nMarkov, youcans

    例程 2:將數(shù)據(jù)導(dǎo)入集中寫成一段,放在程序的起始部分

    # 主程序
    def main():
        # 模型數(shù)據(jù)導(dǎo)入
        p1 = [6, 5, -320]
        p2 = [10, 20, -7027]
        p3 = [10, 9]
    

    怎么讀取數(shù)據(jù)寄存器數(shù)據(jù)_java中從文件讀取數(shù)據(jù)_數(shù)據(jù)結(jié)構(gòu)讀取文件

    print(p1,p2,p3) ? # 算法參數(shù)設(shè)置 tInitial = 100.0 # 設(shè)定初始退火溫度(initial temperature) tFinal = 1 # 設(shè)定終止退火溫度(stop temperature) alfa = 0.98 # 設(shè)定降溫參數(shù),T(k)=alfa*T(k-1) nMarkov = 100 # Markov鏈長度,也即內(nèi)循環(huán)運行次數(shù) youcans = 0.5 # 定義搜索步長,可以設(shè)為固定值或逐漸縮小 print(tInitial, tFinal, alfa, nMarkov, youcans)

    3. 導(dǎo)入數(shù)據(jù)

    雖然很多數(shù)模競賽的問題可以通過直接賦值獲取數(shù)據(jù),但主流的數(shù)據(jù)導(dǎo)入方法還是讀取數(shù)據(jù)文件。

    數(shù)學建模中常用的數(shù)據(jù)文件格式有文本文件(.txt)、Excel 文件(.xls, .xlsx)和 csv 文件(.csv)。

    在讀取文本文件時,會遇到逗號、空格、制表符等不同的數(shù)據(jù)分割符。讀取 Excel 文件時,首先 .xls 與 .xlsx 的格式不同,其次要考慮數(shù)據(jù)表帶不帶標題行,有時文件中還有多個工作表。讀取文件時還會遇到數(shù)據(jù)缺失,非法字符。對于小白來說,特別在競賽時,處理這些問題時都會心神不寧。

    中讀取數(shù)據(jù)文件的方法也很多。本文非常不推薦使用 自身的文件操作如打開(open)、關(guān)閉(close)、讀寫(read、)函數(shù)數(shù)據(jù)結(jié)構(gòu)讀取文件,而是推薦使用 讀取數(shù)據(jù)文件。原因在于:

    提供了多種常用文件格式的讀寫函數(shù),以上各種情況都能一行代碼搞定。 是基于 NumPy 構(gòu)建的數(shù)據(jù)分析工具包,便于進行數(shù)據(jù)整理與清洗,操作方便靈活。 提供了與其它各種數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換工具,使用簡單靈活。 很多數(shù)學建模算法的例程就是使用 的 、 數(shù)據(jù)結(jié)構(gòu),無需進行轉(zhuǎn)換。

    3.1 讀取 Excel 文件

    使用 () 函數(shù)讀取 Excel文件。

    pd.(io, =0,=0,=None,names=None)

    pd.() 的主要參數(shù):

    io : 文件路徑(包括文件名)。 :指定作為列名的行。默認為 0,即首行為標題行。設(shè)置 =None,表示無標題行,首行就是數(shù)據(jù)行。 :指定工作表。默認為 =0。設(shè)置 =None 返回全表, 設(shè)置 =[0,1] 返回多表 。 :指定作為行索引的列編號或列名。 names:指定列名, 類型為 list。

    pd.() 使用實例:

    # sheetname 表示讀取指定的工作表,header=0 表示首行為標題行,header=None 表示首行為數(shù)據(jù)行
    df = pd.read_excel("data/youcans1.xls", sheetname='Sheet1', header=0)

    3.2 讀取 csv 文件

    使用 .() 函數(shù)讀取 Excel文件。

    數(shù)據(jù)結(jié)構(gòu)讀取文件_java中從文件讀取數(shù)據(jù)_怎么讀取數(shù)據(jù)寄存器數(shù)據(jù)

    pd.( ,sep=',', ='infer', names=None, =None)

    pd.() 的主要參數(shù):

    : 文件路徑(包括文件名)。 sep:指定分隔符。默認為逗號 ',',可根據(jù)需要設(shè)置其它分隔符。 :指定作為列名的行。如果文件沒有列名則默認為 0,表示首行就是數(shù)據(jù)行;設(shè)置 =None,表示無標題行,首行就是數(shù)據(jù)行。 :指定作為行索引的列編號或列名。 names:指定列名, 類型為 list。

    pd.() 使用實例:

    # sep=','表示間隔符為逗號,header=0表示首行為標題行,header=None 表示首行為數(shù)據(jù)行
    df = pd.read_csv("data/youcans2.csv", header=0, sep=',') 

    3.3 讀取文本文件

    對于文本文件 .txt 和 .dat,可以使用 .() 函數(shù)讀取 。

    pd.( ,sep='\t', ='infer', names=None, =None)

    pd.() 的主要參數(shù):

    : 文件路徑(包括文件名)。 sep:指定分隔符。默認為 tab 制表符,可根據(jù)需要設(shè)置其它分隔符。 :指定作為列名的行。如果文件沒有列名則默認為 0,表示首行就是數(shù)據(jù)行;設(shè)置 =None,表示無標題行,首行就是數(shù)據(jù)行。 :指定作為行索引的列編號或列名。 names:指定列名, 類型為 list。

    pd.() 使用實例:

    # sep='\t'表示分隔符為制表符,header=None 表示無標題行,第一行是數(shù)據(jù)
    df = pd.read_table("data/youcans3.dat", sep="\t", header=None)

    3.4 讀取其它文件格式

    還提供了讀取多種文件格式的函數(shù),使用方法也都類似,都是一行代碼搞定。例如:

    由于這些文件格式中數(shù)模競賽中很少用到,本文就不進行詳細介紹了。有需要的同學可以根據(jù)函數(shù)名通過搜索引擎搜索參考資料,也可以查閱官方文檔:

    此外,對于大數(shù)據(jù)類的問題,所需處理的數(shù)據(jù)量可能非常大,必要時需對文件進行拆分或合并,也可以用 進行處理,這將在后續(xù)文章結(jié)合具體問題進行講解。

    4. 數(shù)據(jù)導(dǎo)入例程

    【重要說明】以上章節(jié)的內(nèi)容雖然介紹了數(shù)據(jù)導(dǎo)入的基本方法,但恐怕還是難以達到消化吸收,為我所用。為了解決這個問題,本文將相關(guān)內(nèi)容整合為例程,以便于讀者學習收藏,也便于使用修改。

    例程01:讀取數(shù)據(jù)文件

    # mathmodel01_v1.py
    # Demo01 of mathematical modeling algorithm
    # Read data files into DataFrame.
    # Copyright 2021 Youcans, XUPT
    

    怎么讀取數(shù)據(jù)寄存器數(shù)據(jù)_數(shù)據(jù)結(jié)構(gòu)讀取文件_java中從文件讀取數(shù)據(jù)

    # Crated:2021-05-27 ? import pandas as pd ? # 讀取數(shù)據(jù)文件 def readDataFile(readPath): # readPath: 數(shù)據(jù)文件的地址和文件名 # readPath = "../data/youcansxupt.csv" # 文件路徑也可以直接在此輸入 try: if (readPath[-4:] == ".csv"): dfFile = pd.read_csv(readPath, header=0, sep=",") # 間隔符為逗號,首行為標題行 # dfFile = pd.read_csv(filePath, header=None, sep=",") # sep: 間隔符,無標題行 elif (readPath[-4:] == ".xls") or (readPath[-5:] == ".xlsx"): # sheet_name 默認為 0 dfFile = pd.read_excel(readPath, header=0) # 首行為標題行 # dfFile = pd.read_excel(filePath, header=None) # 無標題行 elif (readPath[-4:] == ".dat"): # sep: 間隔符,header:首行是否為標題行 dfFile = pd.read_table(readPath, sep=" ", header=0) # 間隔符為空格,首行為標題行 # dfFile = pd.read_table(filePath,sep=",",header=None) # 間隔符為逗號,無標題行 else: print("不支持的文件格式。") except Exception as e: print("讀取數(shù)據(jù)文件失?。簕}".format(str(e))) return return dfFile ? # 主程序

    數(shù)據(jù)結(jié)構(gòu)讀取文件_怎么讀取數(shù)據(jù)寄存器數(shù)據(jù)_java中從文件讀取數(shù)據(jù)

    def main(): ? # 讀取數(shù)據(jù)文件 # Youcans, XUPT readPath = "../data/toothpaste.csv" # 數(shù)據(jù)文件的地址和文件名 dfFile = readDataFile(readPath) # 調(diào)用讀取文件子程序 print(type(dfFile)) # 查看 dfFile 數(shù)據(jù)類型 print(dfFile.shape) # 查看 dfFile 形狀(行數(shù),列數(shù)) print(dfFile.head()) # 顯示 dfFile 前 5 行數(shù)據(jù) ? return ? if __name__ == '__main__': # Youcans, XUPT main()

    例程01 運行結(jié)果:

    
    (30, 6)
       period  price  average  advertise  difference  sales
    0       1   3.85     3.80       5.50       -0.05   7.38
    1       2   3.75     4.00       6.75        0.25   8.51
    2       3   3.70     4.30       7.25        0.60   9.52
    3       4   3.70     3.70       5.50        0.00   7.50
    4       5   3.60     3.85       7.00        0.25   9.33

    例程01 程序說明:

    本例程需要讀取數(shù)據(jù)文件 "../data/.csv",該文件保存在 ../data/ 目錄下。讀者需要修改該數(shù)據(jù)文件的文件路徑和文件名,以便讀取自己需要的本地文件。本例程可以根據(jù)文件名的后綴自動識別文件類型,調(diào)用相應(yīng)的函數(shù)讀取文件。本例程中讀取文件模塊使用 try... 語句進行簡單的異常處理。如果讀取失敗,可以根據(jù)拋出的異常類型查找錯誤。

    【本節(jié)完】

網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權(quán)所有