ython可以使用各種各樣的文件作為數(shù)據(jù)源:
平面文件--txt,csv - 很簡單,可以使用numpy或pandas導(dǎo)入。
numpy.recfromcsv - 加載存儲在逗號分隔文件中的ASCII數(shù)據(jù)。返回的數(shù)組是一個記錄數(shù)組(如果usemask=False)或masked記錄數(shù)組(如果usemask=True)。Python示例代碼:
data=np.recfromcsv(file)
numpy.loadtxt - 此函數(shù)旨在成為簡單格式化文件的快速閱讀器。該genfromtxt函數(shù)提供了更復(fù)雜的處理,例如,缺失值的行。
data=np.loadtxt('file.csv', delimiter=',', skiprows=1, usecols=[0,2])
numpy.genfromtxt - 從文本文件加載數(shù)據(jù),并按指定處理缺失值。是更復(fù)雜的函數(shù),有很多參數(shù)來控制你的導(dǎo)入。
data=np.genfromtxt('titanic.csv', delimiter=',', names=True, dtype=None)
使用pandas更容易 - 一行,你準備好DataFrame中的文件。還支持可選地將文件迭代或分解為塊。
data=pd.read_csv(file, nrows=5, header=None, sep='\t', comment='#', na_values='Nothing')
它用于序列化和反序列化Python對象結(jié)構(gòu)。可以對python中的任何對象進行pickle,以便將其保存在磁盤上。pickle的作用是在將對象寫入文件之前先將其“序列化”。Pickling是一種將python對象(list,dict等)轉(zhuǎn)換為字符流的方法。這個想法是這個字符流包含在另一個python腳本中重建對象所需的所有信息。下面的代碼將打印一個在某處創(chuàng)建并存儲在文件中的字典 - 非常酷,不是嗎?
import pickle with open('data.pkl', 'rb') as file: d=pickle.load(file) print(d)
與pandas.read_excel將Excel表讀入panda DataFrame中,并進行了大量的自定義導(dǎo)入數(shù)據(jù),這個函數(shù)的文檔很清楚,你可以用Excel文件做任何你想做的事情。
df=pd.read_excel('file.xlsx', sheet_name='sheet1')
SAS代表統(tǒng)計分析軟件。SAS數(shù)據(jù)集包含組織為觀察(行)和變量(列)表的數(shù)據(jù)值。要打開此類文件并從中導(dǎo)入數(shù)據(jù),請看下面的Python代碼示例:
from sas7bdat import SAS7BDAT with SAS7BDAT('some_data.sas7bdat') as file: df_sas=file.to_data_frame()
Stata是一款強大的統(tǒng)計軟件,可以讓用戶分析、管理和生成數(shù)據(jù)的圖形化可視化。它主要被經(jīng)濟學(xué)、生物醫(yī)學(xué)和政治學(xué)領(lǐng)域的研究人員用于研究數(shù)據(jù)模式。存儲在.dta文件中的數(shù)據(jù),導(dǎo)入它的最好方法是pandas.read_stata
df=pd.read_stata('file.dta')
分層數(shù)據(jù)格式(HDF)是一組文件格式(HDF4, HDF5),用于存儲和組織大量數(shù)據(jù)。HDF5是一個獨特的技術(shù)套件,可以管理非常大和復(fù)雜的數(shù)據(jù)集合。HDF5簡化了文件結(jié)構(gòu),只包含兩種主要類型的對象:
這就產(chǎn)生了一種真正的層次化、文件系統(tǒng)式的數(shù)據(jù)格式。實際上,HDF5文件中的資源甚至可以使用類似/ path / to / resource訪問HDF5文件中的資源。元數(shù)據(jù)以用戶定義的、附加到Groups和Datasets的命名屬性的形式存儲。然后,可以使用數(shù)據(jù)集、組和屬性構(gòu)建表示圖像和表的更復(fù)雜的存儲api。
要導(dǎo)入HDF5文件,我們需要h5py庫。下面的Python代碼示例使我更輕松,完全可以理解。
import h5py # Load file: data=h5py.File('file.hdf5', 'r') # Print the keys of the file for key in data.keys(): print(key) # Now when we know the keys we can get the HDF5 group group=data['group_name'] # Going one level deeper, check out keys of group for key in group.keys(): print(key) # And so on and so on
很多人使用MATLAB并將數(shù)據(jù)存儲在.mat文件中。那些文件是什么?這些文件包含在MATLAB工作空間中分配給它們的變量和對象列表。將它作為字典導(dǎo)入Python并不奇怪,其中鍵是MATLAB變量和值 - 分配給這些變量的對象。要編寫和讀取MATLAB文件,請使用scipy.io包。
import scipy.io mat=scipy.io.loadmat('some_project.mat') print(mat.keys())
使用驅(qū)動程序連接到數(shù)據(jù)庫,我們可以直接從那里獲取數(shù)據(jù)。通常它意味著:創(chuàng)建連接,連接,運行查詢,獲取數(shù)據(jù),關(guān)閉連接。它可以一步一步地完成,但在pandas 中只需要sqlalchemy包創(chuàng)建的連接。下面是連接到sqlite數(shù)據(jù)庫引擎并從中獲取數(shù)據(jù)的示例:
from sqlalchemy import create_engine import pandas as pd # Create engine engine=create_engine('sqlite:///localdb.sqlite') # Execute query and store records in DataFrame df=pd.read_sql_query("select * from table", engine)
首先,如果我們有一個文件的URL,我們可以使用標準的pandas.read_csv / pandas.read_excel函數(shù)在參數(shù)“file=”中指定它
df=pd.read_csv('https://www.example.com/data.csv', sep=';')
除此之外,要從Web獲取數(shù)據(jù),我們需要使用HTTP協(xié)議,特別是GET方法。并且requests 包做了這個令人難以置信的工作。要從requests.get收到的響應(yīng)中訪問文本,我們只需要使用方法.text。
import requests r=requests.get('http://www.example.com/some_html_page') print(r.text)
r.text將為我們提供一個包含所有html標簽的網(wǎng)頁 - 不是很有用,不是嗎?我們有一個BeautifulSoup包,可以解析HTML并提取我們需要的信息,在本例中是所有超鏈接(繼續(xù)前面的例子):
from bs4 import BeautifulSoup html_doc=r.text # Create a BeautifulSoup object from the HTML soup=BeautifulSoup(html_doc) # Find all 'a' tags (which define hyperlinks) a_tags=soup.find_all('a') # Print the URLs to the shell for link in a_tags: print(link.get('href'))
在計算機編程中,應(yīng)用程序編程接口(API)是一組子例程定義,通信協(xié)議和用于構(gòu)建軟件的工具。一般而言,它是一組明確定義的各種組件之間的通信方法。有許多不同的API,首先必須做的是檢查文檔,但事實是幾乎所有API都以JSON格式返回數(shù)據(jù)。requests 包將再次幫助我們。(我們必須發(fā)送HTTP GET請求以從API獲取數(shù)據(jù))。
import requests r=requests.get('https://www.example.com/some_endpoint') # Decode the JSON data into a dictionary: json_data=r.json() # Print each key-value pair in json_data for k in json_data.keys(): print(k + ': ', json_data[k])
我們可以看到,數(shù)據(jù)無處不在,我們必須知道獲取它的所有方法
件介紹
Matlab(矩陣實驗室)是全球領(lǐng)先的數(shù)學(xué)計算軟件開發(fā)商美國 MathWorks 公司研發(fā)的一款面向科學(xué)與工程計算的高級語言的商業(yè)數(shù)學(xué)軟件,集算法開發(fā)、數(shù)據(jù)分析、可視化和數(shù)值計算于一體的編程環(huán)境,其核心是仿真交互式矩陣計算,廣泛應(yīng)用于科學(xué)計算、數(shù)據(jù)分析、算法開發(fā)和繪圖設(shè)計等科研領(lǐng)域應(yīng)用環(huán)境。
MATLAB 是一種面向科學(xué)與工程計算的高級語言,允許以數(shù)學(xué)形式的語言編寫程序,比BASIC、FORTRAN 和 C語言都要更加接近于我們書寫數(shù)學(xué)計算公式的思維方式。可以說,用MATLAB 編寫程序,就像是在草稿紙上排列公式和求解問題,因此對于理科生和科研人員來說,它編寫簡單,編程效率高,而且通俗易懂。
MATLAB 是對代碼、文件和數(shù)據(jù)進行管理的開發(fā)環(huán)境;是按迭代的方式探查、設(shè)計及求解問題的交互式工具;可用于包括線性代數(shù)、統(tǒng)計、傅里葉分析、篩選、優(yōu)化以及數(shù)值積分等的數(shù)學(xué)函數(shù);可用于可視化數(shù)據(jù)的二維和三維圖形函數(shù)構(gòu)建和設(shè)計;可用于基于MATLAB 的算法與外部應(yīng)用程序和語言集成的各種函數(shù)。
MATLAB核心競爭力之一的Simulink模塊化建模環(huán)境,是面向多域和嵌入式工程系統(tǒng)的仿真和基于模型的設(shè)計,可以用傻瓜式的拖動進行很多問題的建模,廣泛用于汽車、航空航天、通訊、電子、信號處理、工業(yè)自動化、視頻處理和圖像處理系統(tǒng)等領(lǐng)域的創(chuàng)新和開發(fā)。如果沒有Simulink,通信、控制、信號、車輛等專業(yè)的研究效率都會受到影響。哪怕不用Simulink,很多這方面的仿真軟件也只提供MATLAB接口。
軟件截圖
更新日志
MATLAB幫助文檔 - MathWorks 中國
https://ww2.mathworks.cn/help/releases/R2021a/matlab/getting-started-with-matlab.html
MATLAB發(fā)行說明 - MathWorks 中國
https://ww2.mathworks.cn/help/releases/R2021a/matlab/release-notes.html
運行要求
Windows 7 SP1 x64、Windows 10 1803 x64 或更高版
硬件要求:16G內(nèi)存 + 獨顯 + Inter酷睿(適合)、AMD銳龍
2021年可以流暢跑Matlab的生產(chǎn)力兼游戲筆記本型號推薦:
R/Y9000P,X ROG幻15/14, ThinkPad P17, X1 Carbon 美版
其次:聯(lián)想小新Pro/Air Plus(辦公和生產(chǎn)力需求買帶獨顯版)
效驗信息
# 初始完整安裝包
鏡像大小:19.2GB
創(chuàng)建時間:Fri Sep 17 15:46:28 2021
初始版本:R2021b v9.11.0.1769968
鏡像名稱:Matlab911R2021b_Win64.iso
SHA1: E28A6EEED0ED7918D32BDC0297E4932256DFDD36
# 更新補丁安裝包
鏡像大小:6.76GB
創(chuàng)建時間:2022年2月8日, 17:00:00
詳細版本:R2021b Update 3 v9.11.0.1873467
鏡像名稱:Matlab911_R2021b_Update3Win.iso
SHA1: 6078C9C554EC9D9128F5D0AA8009A9FAA3EB7875
網(wǎng)盤:MATLAB R2021b Update3 - 清風(fēng)小站 (qfwl.ltd)
ATLAB的工作區(qū)有:基礎(chǔ)工作區(qū)( 'base' )和函數(shù)工作區(qū)('caller')。
基礎(chǔ)工作區(qū):用于存儲在命令行中創(chuàng)建的變量,或者存儲當前命令行或編輯器運行m腳本時腳本創(chuàng)建的變量。
函數(shù)工作區(qū):為保護數(shù)據(jù)的完整性,每個函數(shù)都有其自己的工作區(qū),該工作區(qū)與基礎(chǔ)工作區(qū)和所有其他工作區(qū)分開。例如,假設(shè) funA 調(diào)用 funB。funB 的調(diào)用方工作區(qū)就是 funA。
如何在工作區(qū)之間共享變量或如何使它們在函數(shù)執(zhí)行之間持久保留。
大多數(shù)情況下,在函數(shù)內(nèi)創(chuàng)建的變量是僅可在該函數(shù)內(nèi)識別的局部變量。局部變量不能用在命令行中,也不適用于任何其他函數(shù)。但是,可以通過多種方式在函數(shù)或工作區(qū)之間共享數(shù)據(jù)。
1.最佳做法:傳遞參量
擴大函數(shù)變量作用域的最安全的方式是使用函數(shù)輸入和輸出參量,這樣可以傳遞變量的值。
例如,創(chuàng)建兩個函數(shù) update1 和 update2,它們共享和修改輸入值。update2 可以是文件 update1.m 中的局部函數(shù),也可以是它自己的文件 update2.m 中的函數(shù)。
示例程序1
clc;%清除命令行窗口命令
clear all;%清除工作區(qū)變量
close all;%關(guān)閉圖形窗口
X=[1:500];
Y=update1(X);
figure;
scatter(X,Y,'filled');
function y1=update1(x1)
y1=1 + update2(x1);
end
function y2=update2(x2)
y2=2 * cos(x2)+5*sin(x2);
end
運行結(jié)果
2.嵌套函數(shù)
嵌套函數(shù)可以訪問其所在的所有函數(shù)的工作區(qū)。所以,例如嵌套函數(shù)可以使用在其父函數(shù)中定義的變量(在本例中為 x):
示例程序2
function primaryFx
x=1;
fprintf("x1=%d\n",x);
nestedFx;
fprintf("x2=%d\n",x);
function nestedFx
x=x + 1;
fprintf("x3=%d\n",x);
end
end
運行結(jié)果
>> primaryFx
x1=1
x3=2
x2=2
如果父函數(shù)不使用指定變量,變量保持為嵌套函數(shù)的局部變量。例如,在該版本的 primaryFx 中,以下兩個嵌套函數(shù)擁有它們自己的不能彼此交互的 x 版本。
示例程序3
function primaryFx1
nestedFx1
nestedFx2
function nestedFx1
x=1;
fprintf("x1=%d\n",x);
end
function nestedFx2
x=2;
fprintf("x1=%d\n",x);
end
end
運行結(jié)果
>> primaryFx1
x1=1
x1=2
>>
3.持久變量
如果將函數(shù)內(nèi)的變量聲明為持久變量,則從一個函數(shù)調(diào)用轉(zhuǎn)到下個函數(shù)調(diào)用時變量會保留其值。其他局部變量僅在當前函數(shù)執(zhí)行期間保留它們的值。持久變量等效于其他編程語言中的靜態(tài)變量。
要使用 persistent 關(guān)鍵字聲明變量之后再使用它們。MATLAB將持久變量初始化為空矩陣[]。
例如,在名為 findSum.m 的文件中定義一個函數(shù),先將總和值初始化為 0,然后在每次迭代時與該值相加。
示例程序4
clc;%清除命令行窗口命令
clear all;%清除工作區(qū)變量
close all;%關(guān)閉圖形窗口
for inputvalue=1:10
findSum(inputvalue);
end
function findSum(inputvalue)
persistent SUM_X
if isempty(SUM_X)
SUM_X=0;
end
SUM_X=SUM_X + inputvalue;
SUM_X
end
運行結(jié)果
SUM_X=55
>>
調(diào)用該函數(shù)時,SUM_X 的值在后續(xù)執(zhí)行之間持久保留。
以下操作可清除函數(shù)的持久變量:
clear all
clear functionname
編輯函數(shù)文件
要避免清除持久變量,請使用 mlock 鎖定函數(shù)文件。
4.全局變量
全局變量是可以從函數(shù)或命令行中訪問的變量。它們擁有自己的工作區(qū),這些工作區(qū)與基礎(chǔ)和函數(shù)工作區(qū)分開。
但是,全局變量具有顯著風(fēng)險。例如:
如果使用全局變量,請使用 global 關(guān)鍵字聲明它們,然后從任何特定位置(函數(shù)或命令行)訪問它們。例如,在名為 falling.m 的文件中創(chuàng)建一個函數(shù)。
示例程序5
clc;%清除命令行窗口命令
clear all;%清除工作區(qū)變量
global GRAVITY
GRAVITY=32;
y=falling((0:.1:5)')'
function h=falling(t)
global GRAVITY
h=1/2*GRAVITY*t.^2;
end
運行結(jié)果
y=列 1 至 11
0 0.1600 0.6400 1.4400 2.5600 4.0000 5.7600 7.8400 10.2400 12.9600 16.0000
列 12 至 22
19.3600 23.0400 27.0400 31.3600 36.0000 40.9600 46.2400 51.8400 57.7600 64.0000 70.5600
列 23 至 33
77.4400 84.6400 92.1600 100.0000 108.1600 116.6400 125.4400 134.5600 144.0000 153.7600 163.8400
列 34 至 44
174.2400 184.9600 196.0000 207.3600 219.0400 231.0400 243.3600 256.0000 268.9600 282.2400 295.8400
列 45 至 51
309.7600 324.0000 338.5600 353.4400 368.6400 384.1600 400.0000
>>
通過上述兩條全局語句,可以在函數(shù)內(nèi)使用在命令提示符下賦值給 GRAVITY 的值。但是,更為穩(wěn)健的做法是,重新定義函數(shù)以接該值作為輸入。
5.在另一工作區(qū)中計算
通過 evalin 和 assignin 函數(shù),可以計算字符向量中的命令或變量名稱并指定是否使用當前或基礎(chǔ)工作區(qū)。和全局變量一樣,這些函數(shù)存在覆蓋現(xiàn)有數(shù)據(jù)的風(fēng)險。
assignin函數(shù)作用為指定工作區(qū)中的變量賦值
evalin函數(shù)作用在指定的工作區(qū)中計算 MATLAB 表達式
參考內(nèi)容
[1]https://ww2.mathworks.cn/help/matlab/scope-variables-and-generate-names.html?s_tid=CRUX_lftnav
[2] https://ww2.mathworks.cn/help/matlab/matlab_prog/share-data-between-workspaces.html
[3] https://ww2.mathworks.cn/help/matlab/ref/evalin.html
[4]https://ww2.mathworks.cn/help/matlab/ref/assignin.html?searchHighlight=assignin&s_tid=srchtitle_support_results_1_assignin
本文內(nèi)容來源于網(wǎng)絡(luò),僅供參考學(xué)習(xí),如內(nèi)容、圖片有任何版權(quán)問題,請聯(lián)系處理,24小時內(nèi)刪除。
作 者 | 郭志龍
編 輯 | 郭志龍
校 對 | 郭志龍
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。