python3(二)Numpy
1 基本
1.1 基本介紹
掌握表示, 清洗, 統(tǒng)計(jì)和展示數(shù)據(jù)的能力
Numpy, Matplotlib, Pandas, Projects
摘要: 有損的提取數(shù)據(jù)特征的過程
可以將一組數(shù)據(jù), 摘要出
1) 基本統(tǒng)計(jì)(排序)
2) 分布/累計(jì)統(tǒng)計(jì)
3) 數(shù)據(jù)特征 相關(guān)性, 周期性等
4) 數(shù)據(jù)挖掘(形成知識(shí))
1.2 Anaconda
Anaconda是數(shù)據(jù)分析的基本工具
具體有
1) 開源免費(fèi)
2) 支持800多個(gè)第三方庫
3) 包含多個(gè)主流工具
4) 適合數(shù)據(jù)計(jì)算領(lǐng)域開發(fā)
5) 全平臺(tái)支持
Anaconda是一個(gè)集成各類Python工具的集成平臺(tái)
Anaconda本身不是一個(gè)開發(fā)工具, 而是一個(gè)平臺(tái)
Anaconda是基于conda這個(gè)包管理和環(huán)境管理工具的
conda是一個(gè)工具, 用于包管理和環(huán)境管理, 與pip類似, 管理Python第三方庫, 允許多用戶使用不同版本Python, 并且能靈活切換
anaconda = conda + Python + 第三方庫
1) conda
conda的命令行使用方式(conda推出的時(shí)候推薦使用方式):
檢測(cè)conda版本
conda --version更新conda
conda update conda在Anaconda中的conda的圖形化方式:
打開Anaconda, 可以找到Environments, 默認(rèn)生成了一個(gè)叫做root的環(huán)境空間, 這就是conda的圖形界面形式, 里面列好了安裝和未安裝的包
還可以通過新建一個(gè)環(huán)境空間, 配置新的環(huán)境
2) Spyder
這個(gè)Anaconda集成的一個(gè)編程工具
可以找home中找到spyder, 點(diǎn)擊launch打開
默認(rèn)打開方式界面有三個(gè)區(qū)域, 分別是坐車的編輯區(qū), 右上的文件導(dǎo)航和幫組區(qū), 右下是IPython區(qū)
可以修改界面區(qū)域設(shè)置
也可以設(shè)置編輯區(qū)的主題
Tools -> preference -> Syntax coloring -> Scheme -> Monokai
IPython是一個(gè)功能強(qiáng)大的交互式shell
適合交互式數(shù)據(jù)可視化
適合GUI相關(guān)應(yīng)用
IPython的使用技巧
可以在變量后面加上? 來查看具體信息
IPython的輸入提示前面有 In 表示提示輸入, Out 表示輸出, 后面中括號(hào)里面的是輸入命令的序號(hào)
直接在命令行中執(zhí)行py文件
%run py文件%魔術(shù)命令
IPython事實(shí)上提供了交互接口, 具體執(zhí)行還是Python內(nèi)核
回到頂部2 ?Numpy入門
2.1 數(shù)據(jù)的維度
維度: 一組數(shù)據(jù)的組織形式
一維數(shù)據(jù): 沿著一個(gè)方向(X軸)展開
一維數(shù)據(jù)由對(duì)等的, 有序或者無序的 數(shù)據(jù)構(gòu)成, 采用線性方式組織
可以列表, 數(shù)組, 集合等表示
列表與數(shù)組基本相似, 只有一點(diǎn)不同, 數(shù)組內(nèi)的數(shù)據(jù)類型是一致的, 但是列表不要求數(shù)據(jù)類型一致
二維數(shù)據(jù): 沿著兩個(gè)方向(X軸, Y軸)展開(類似表格)
由多個(gè)一維數(shù)據(jù)構(gòu)成, 是一維數(shù)據(jù)的組合形成
可用列表形式表示
多維數(shù)據(jù)
由一維或者二維數(shù)據(jù)在新維度上擴(kuò)展形成
可用字典, 列表形式表示
2.2 ndarray
NumPy是一個(gè)開元的Python科學(xué)計(jì)算基礎(chǔ)庫, 內(nèi)含:
1) N維數(shù)組對(duì)象 ndarray
2) 廣播功能函數(shù), 用于在數(shù)組之間進(jìn)行計(jì)算
3) 整合c/c++/Fortran代碼工具
4) 線性代數(shù), 傅里葉變換, 隨機(jī)數(shù)生成
NumPy是SciPy, Panda是等數(shù)據(jù)處理或者科學(xué)計(jì)算庫的基礎(chǔ)
引用NUmPy
import numpy as npnp是一個(gè)約定俗成的別名
ndarray
是NumPy中用作N維數(shù)組對(duì)象
與列表相比, 有更適合科學(xué)計(jì)算的特點(diǎn)
1)?ndarray內(nèi)的數(shù)據(jù)是同一類型, 因此可以整體對(duì)該類型進(jìn)行操作, 更加貼近使用
2) 經(jīng)過優(yōu)化, 可以提升基于這個(gè)特點(diǎn)的運(yùn)算速度
3) 基于這個(gè)特點(diǎn), 可以節(jié)省運(yùn)算和存儲(chǔ)空間(因?yàn)轭愋拖嗤?
由兩部分構(gòu)成
1) 實(shí)際的數(shù)據(jù)
2) 描述這些數(shù)據(jù)的元數(shù)據(jù)(數(shù)據(jù)維度, 數(shù)據(jù)類型等)
一般要求所有元素的類型是相同的
數(shù)組的下表是從0開始的
兩個(gè)基本概念
1) 軸(axis) 保存數(shù)據(jù)的維度 在軸上, 每個(gè)數(shù)據(jù)存儲(chǔ)在其中
2) 秩(rank) 軸的數(shù)量(數(shù)據(jù)類型有多少個(gè)維度)
對(duì)象的屬性
ndarray支持的元素類型
這樣的精確定義可以使得對(duì)存儲(chǔ)空間有一個(gè)更好的優(yōu)化, 也可以幫組估計(jì)程序的規(guī)模
另外, 盡量在定義ndarray的時(shí)候使用同質(zhì)的對(duì)象, 也就是元素的個(gè)數(shù)相同
如果不同質(zhì), 那么ndarray會(huì)把整個(gè)元素當(dāng)成一個(gè)對(duì)象
2.3 ndarray數(shù)組的創(chuàng)建
創(chuàng)建ndarray的四種方式
1) 使用列表, 元組
2) 使用NumPy穿件ndarray數(shù)組, 如arange, ones, zeros
3) 從字節(jié)流(raw bytes)中創(chuàng)建
4) 從文件中讀取特定格式
1)?使用列表, 元組創(chuàng)建
變量名 = np.array(列表或者元組類型數(shù)據(jù), dtype=np.類型)其中可以不指定dtype, 這樣NumPy會(huì)根據(jù)輸入的內(nèi)容來自動(dòng)判斷使用什么樣的數(shù)據(jù)類型
2) 最常用的方法, 使用NumPy穿件ndarray數(shù)組
可以看到,?linspace()中的endpoint設(shè)為False時(shí), 計(jì)算的規(guī)則并沒有改變, 只是最后一個(gè)邊界值不顯示了
也就是說, 設(shè)置為False的時(shí)候, 相當(dāng)于計(jì)算的時(shí)候第三個(gè)參數(shù)+1, 然后最后一個(gè)值不要
所以linspace(1, 10, 4) 基本等效于?linspace(1, 10, 3, endpoint=False), 只是最后一個(gè)值沒有了
由于浮點(diǎn)數(shù)在科學(xué)計(jì)算中的普遍性, 除了arange函數(shù)之外, 基本上創(chuàng)建出的都默認(rèn)使用浮點(diǎn)數(shù)作為類型
2.4 對(duì)ndarray的變換
ndarray的變換包括維度的變換和元素類型的變換
主要方法有
更多關(guān)于swapaxes
np.int沒有這個(gè)類型, 代表的是一類數(shù)據(jù)類型
astype()方法一定會(huì)創(chuàng)建新的數(shù)組(原始數(shù)據(jù)的一個(gè)拷貝), 即使兩個(gè)類型一致
2.5 ndarray的操作
基本才做是 索引 和 切片
索引: 獲取數(shù)組中特定位置元素的過程
切片: 獲得數(shù)組的元素子集的過程
一維數(shù)組的操作, 與列表類似
多維素組的操作
2.6 ndarray的運(yùn)算
1) 數(shù)組與標(biāo)量之間的運(yùn)算
數(shù)組中的數(shù)據(jù)都與這個(gè)標(biāo)量進(jìn)行運(yùn)算
2) NumPy一元函數(shù)
對(duì)ndarray中的數(shù)據(jù)執(zhí)行元素級(jí)運(yùn)算的函數(shù)
3) NumPy二元函數(shù)
基本理念是將數(shù)組當(dāng)做一個(gè)元素進(jìn)行處理表示, 不具體理會(huì)具體實(shí)現(xiàn)
可以使用常用的表示符來表示
回到頂部
3 NumPy的數(shù)據(jù)存取與函數(shù)
3.1 CSV文件存取
CSV(Comma-Separated Value, 逗號(hào)分割值)
CSV是一種常見的文件格式, 用來存儲(chǔ)批量數(shù)據(jù)
主要是用于存儲(chǔ)一維或者二維數(shù)據(jù)
? 1) 寫入CSV文件
np.savetxt(frame, array, fmt="%.18e", delimiter=None)frame: 文件, 字符串或產(chǎn)生器, 也可以是.gz或.bz2的壓縮文件
array: 存入文件的數(shù)組
fmt: 寫入文件的格式, 默認(rèn)是%.18e也就是保留小數(shù)點(diǎn)后18位的科學(xué)計(jì)數(shù)法, ?如%d ?%.2f ?%.18e
delimiter: 分割字符串, 默認(rèn)是任何空格
2) 讀入CSV文件
np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)frame:?文件, 字符串或產(chǎn)生器, 也可以是.gz或.bz2的壓縮文件
dtype: 數(shù)據(jù)類型, 可選
delimiter: 分割字符串, 默認(rèn)是任何空格
unpack: 如何True, 讀入屬性將分別寫入不同變量
CSV文件的局限性
CSV只能有效存儲(chǔ)一維和二維數(shù)組
3.2 多維數(shù)據(jù)的存取
多維數(shù)據(jù)的存儲(chǔ)用tofile
1) 多維數(shù)據(jù)的存儲(chǔ)
a.tofile(frame, sep='', format='%s')frame: 文件, 字符串
sep:?數(shù)據(jù)分割字符串,如果是空串,寫入文件為二進(jìn)制
format: 寫入數(shù)據(jù)的格式
指定分割符的時(shí)候, 打開保存的文件是能夠閱讀的
如果不指定分隔符, 則保存的是二進(jìn)制數(shù)據(jù), 保存二進(jìn)制的時(shí)候更加的省存儲(chǔ)空間
一般來說, 保存的文件用.dat格式, 也就是文件格式
2) 多維數(shù)據(jù)的讀取
np.fromfile(frame, dtype=float, count=‐1, sep='')frame: 文件, 字符串
dtype: 讀取的數(shù)據(jù)類型, 默認(rèn)是所有數(shù)據(jù)類型
count: 讀入元素個(gè)數(shù), -1表示讀入整個(gè)文件, 需要部分的話就需要寫讀入的數(shù)量
sep: 數(shù)據(jù)分割字符串, 如果是空串, 讀入文件為二進(jìn)制
注意事項(xiàng)
由于讀入之后維度信息丟失, 讀完之后就是一個(gè)純一維數(shù)組
因此,?該方法需要讀取時(shí)知道存入文件時(shí)數(shù)組的維度和元素類型
解決辦法是再寫一個(gè)元數(shù)據(jù)文件存儲(chǔ)丟失的維度信息和元素類型, 這在存儲(chǔ)大量的數(shù)據(jù)的時(shí)候還是很有效的
因此, 一般來說tofile()和fromfile()需要配合使用
3) NumPy提供的便捷文件存取
np.save(fname, array) np.savez(fname, array) fname:?文件名,以.npy為擴(kuò)展名,壓縮擴(kuò)展名為.npz
array: 數(shù)組變量
np.load(fname) fname:?文件名,以.npy為擴(kuò)展名,壓縮擴(kuò)展名為.npz
注意, 使用NumPy提供的便捷方法確實(shí)很夠很快的存取而且, 保留了維度信息和數(shù)據(jù)類型信息, 能夠很好的還原
保留的原因是因?yàn)樵跀?shù)據(jù)的首行保留了這些信息
但是這只能在NumPy中使用
要想在各個(gè)環(huán)境中交互, 還需要使用之前的tofile()和fromfile()
3.3 NumPy的隨機(jī)數(shù)函數(shù)
NumPy中的 np.random.* 可以為數(shù)組提供相應(yīng)的隨機(jī)數(shù)的功能
常見的隨機(jī)數(shù)函數(shù)有:
種子函數(shù)就是設(shè)定一個(gè)種子值, 下次使用的隨機(jī)函數(shù)就是按照這個(gè)值來生成的, 相同的種子值隨機(jī)出來的值是相同的
shuffle改變?cè)瓉淼臄?shù)組
permutation不改變?cè)瓉淼臄?shù)組
choice中replace默認(rèn)為True, 也就是抽到的元素可以重復(fù)抽取. 設(shè)為False是, 則不可以重復(fù)抽取
3.4 NumPy的統(tǒng)計(jì)函數(shù)
NumPy直接提供統(tǒng)計(jì)類函數(shù)
其中axis表示軸, 可以指定編號(hào), 來指定計(jì)算第幾維的數(shù)據(jù)進(jìn)行計(jì)算
如shape為(3, 5)的數(shù)組, anis=0時(shí), 是將每個(gè)數(shù)組對(duì)應(yīng)的元素處理, anis=1就是處理里面的給個(gè)數(shù)組, anis=3超出邊界
argmin()和argmax()獲得的是, 將原數(shù)組處理成一維數(shù)組之后得到的index
可以使用unravel_index()傳入shape來獲得真是的index
3.5 NumPy的梯度函數(shù)
NumPy中有個(gè)著名的梯度函數(shù)
np.gradient(f)計(jì)算數(shù)組f中元素的梯度, 當(dāng)f為多維時(shí), 返回每個(gè)維度梯度
梯度: 連續(xù)值之間的變化率, 即斜率
XY坐標(biāo)軸連續(xù)三個(gè)X坐標(biāo)對(duì)象的Y軸值: a, b, c, 其中, b的梯度是(c-a)/2
當(dāng)在最末尾或者最開始時(shí), 即a, b, …的情況, a的梯度是(b-a); 當(dāng)為…, a, b的時(shí)候, b的梯度為(b-a)
始終是都一個(gè)減去前一個(gè)
使用范圍, 在處理圖像, 聲音的時(shí)候, 可以發(fā)現(xiàn)圖像或者聲音的邊緣
回到頂部4 圖像的手繪效果
4.1 圖像的數(shù)組表示
圖像一般采用RGB色彩模式
RGB表示像素點(diǎn)的顏色有紅(R)綠(G)藍(lán)(B), 取值范圍都是0~255
RGB形成的顏色包括了人類視力所能感知的所有顏色
處理圖像是使用PIL處理
安裝PIL是 pip install pillow
可以 from PIL import Image來導(dǎo)入圖像類
一張圖就可以用一個(gè)Image對(duì)象來表示
圖像的數(shù)組表示
圖像是一個(gè)三維數(shù)組, 維度分別是高度, 寬度, 像素RGB值
4.2 圖像的變換
圖像變換的流程
1) 讀入圖像
2) 處理得到的像素RGB數(shù)組
3) 保存為新文件
基本代碼
變換1
?
其中convert(‘L’)可以將圖片轉(zhuǎn)為灰度圖片, 此時(shí)生成的就是一個(gè)二維數(shù)組了
變換2
變換3
4.3 手繪效果
手繪的幾個(gè)特征
1) 黑白灰
2) 邊界線條較重
3) 相同或相近色彩趨于白色
4) 略有光源效果
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的python3(二)Numpy的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宏碁创始人:英特尔亏损显示 PC 产业已
- 下一篇: NASA 成功测试超音速旋转爆震火箭发动