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