python中的各種模塊(np,os,shutill)


PS:本博文摘抄自中國慕課大學上的課程《Python數據分析與展示》,推薦剛入門的同學去學習,這是非常好的入門視頻。

#np模塊

.ndim :維度 
.shape :各維度的尺度 (2,5) 
.size :元素的個數 10 
.dtype :元素的類型 dtype(‘int32’) 
.itemsize :每個元素的大小,以字節為單位 ,每個元素占4個字節 
ndarray數組的創建 
np.arange(n) ; 元素從0到n-1的ndarray類型 
np.ones(shape): 生成全1 
np.zeros((shape), ddtype = np.int32) : 生成int32型的全0 
np.full(shape, val): 生成全為val 
np.eye(n) : 生成單位矩陣

np.ones_like(a) : 按數組a的形狀生成全1的數組 
np.zeros_like(a): 同理 
np.full_like (a, val) : 同理

np.linspace(1,10,4): 根據起止數據等間距地生成數組 
np.linspace(1,10,4, endpoint = False):endpoint 表示10是否作為生成的元素 
np.concatenate():多個數組的拼接

  • 數組的維度變換

.reshape(shape) : 不改變當前數組,依shape生成 
.resize(shape) : 改變當前數組,依shape生成 
.swapaxes(ax1, ax2) : 將兩個維度調換 
.flatten() : 對數組進行降維,返回折疊后的一位數組

  • 數組的類型變換

數據類型的轉換 :a.astype(new_type) : eg, a.astype (np.float) 
數組向列表的轉換: a.tolist() 
數組的索引和切片

  • 一維數組切片

a = np.array ([9, 8, 7, 6, 5, ]) 
a[1:4:2] –> array([8, 6]) : a[起始編號:終止編號(不含): 步長]

  • 多維數組索引

a = np.arange(24).reshape((2, 3, 4)) 
a[1, 2, 3] 表示 3個維度上的編號, 各個維度的編號用逗號分隔

  • 多維數組切片

a [:,:,::2 ] 缺省時,表示從第0個元素開始,到最后一個元素 
數組的運算 
np.abs(a) np.fabs(a) : 取各元素的絕對值 
np.sqrt(a) : 計算各元素的平方根 
np.square(a): 計算各元素的平方 
np.log(a) np.log10(a) np.log2(a) : 計算各元素的自然對數、10、2為底的對數 
np.ceil(a) np.floor(a) : 計算各元素的ceiling 值, floor值(ceiling向上取整,floor向下取整) 
np.rint(a) : 各元素 四舍五入 
np.modf(a) : 將數組各元素的小數和整數部分以兩個獨立數組形式返回 
np.exp(a) : 計算各元素的指數值 
np.sign(a) : 計算各元素的符號值 1(+),0,-1(-) 

np.maximum(a, b) np.fmax() : 比較(或者計算)元素級的最大值 
np.minimum(a, b) np.fmin() : 取最小值 
np.mod(a, b) : 元素級的模運算 
np.copysign(a, b) : 將b中各元素的符號賦值給數組a的對應元素

  • 數據的CSV文件存取

CSV (Comma-Separated Value,逗號分隔值) 只能存儲一維和二維數組

np.savetxt(frame, array, fmt=’% .18e’, delimiter = None): frame是文件、字符串等,可以是.gz .bz2的壓縮文件; array 表示存入的數組; fmt 表示元素的格式 eg: %d % .2f % .18e ; delimiter: 分割字符串,默認是空格 
eg: np.savetxt(‘a.csv’, a, fmt=%d, delimiter = ‘,’ )

np.loadtxt(frame, dtype=np.float, delimiter = None, unpack = False) : frame是文件、字符串等,可以是.gz .bz2的壓縮文件; dtype:數據類型,讀取的數據以此類型存儲; delimiter: 分割字符串,默認是空格; unpack: 如果為True, 讀入屬性將分別寫入不同變量。 
多維數據的存取 
a.tofile(frame, sep=’’, format=’%s’ ) : frame: 文件、字符串; sep: 數據分割字符串,如果是空串,寫入文件為二進制 ; format:: 寫入數據的格式 
eg: a = np.arange(100).reshape(5, 10, 2) 
a.tofile(“b.dat”, sep=”,”, format=’%d’)

np.fromfile(frame, dtype = float, count=-1, sep=’’): frame: 文件、字符串 ; dtype: 讀取的數據以此類型存儲; count:讀入元素個數, -1表示讀入整個文件; sep: 數據分割字符串,如果是空串,寫入文件為二進制

PS: a.tofile() 和np.fromfile()要配合使用,要知道數據的類型和維度。

np.save(frame, array) : frame: 文件名,以.npy為擴展名,壓縮擴展名為.npz ; array為數組變量 
np.load(fname) : frame: 文件名,以.npy為擴展名,壓縮擴展名為

np.save() 和np.load() 使用時,不用自己考慮數據類型和維度。

  • numpy隨機數函數

numpy 的random子庫

rand(d0, d1, …,dn) : 各元素是[0, 1)的浮點數,服從均勻分布 
randn(d0, d1, …,dn):標准正態分布 
randint(low, high,( shape)): 依shape創建隨機整數或整數數組,范圍是[ low, high) 
seed(s) : 隨機數種子

shuffle(a) : 根據數組a的第一軸進行隨機排列,改變數組a 
permutation(a) : 根據數組a的第一軸進行隨機排列, 但是不改變原數組,將生成新數組 
choice(a[, size, replace, p]) : 從一維數組a中以概率p抽取元素, 形成size形狀新數組,replace表示是否可以重用元素,默認為False。 
eg:  
replace = False時,選取過的元素將不會再選取

uniform(low, high, size) : 產生均勻分布的數組,起始值為low,high為結束值,size為形狀 
normal(loc, scale, size) : 產生正態分布的數組, loc為均值,scale為標准差,size為形狀 
poisson(lam, size) : 產生泊松分布的數組, lam隨機事件發生概率,size為形狀 
eg: a = np.random.uniform(0, 10, (3, 4)) a = np.random.normal(10, 5, (3, 4))

  • numpy的統計函數

sum(a, axis = None) : 依給定軸axis計算數組a相關元素之和,axis為整數或者元組 
mean(a, axis = None) : 同理,計算平均值 
average(a, axis =None, weights=None) : 依給定軸axis計算數組a相關元素的加權平均值 
std(a, axis = None) :同理,計算標准差 
var(a, axis = None): 計算方差 
eg: np.mean(a, axis =1) : 對數組a的第二維度的數據進行求平均 
a = np.arange(15).reshape(3, 5) 
np.average(a, axis =0, weights =[10, 5, 1]) : 對a第一各維度加權求平均,weights中為權重,注意要和a的第一維匹配

min(a) max(a) : 計算數組a的最小值和最大值 
argmin(a) argmax(a) : 計算數組a的最小、最大值的下標(注:是一維的下標) 
unravel_index(index, shape) : 根據shape將一維下標index轉成多維下標 
ptp(a) : 計算數組a最大值和最小值的差 
median(a) : 計算數組a中元素的中位數(中值) 
eg:a = [[15, 14, 13], 
[12, 11, 10] ] 
np.argmax(a) –> 0 
np.unravel_index( np.argmax(a), a.shape) –> (0,0)

  • numpy的梯度函數

np.gradient(a) : 計算數組a中元素的梯度,f為多維時,返回每個維度的梯度 
離散梯度: xy坐標軸連續三個x軸坐標對應的y軸值:a, b, c 其中b的梯度是(c-a)/2 
而c的梯度是: (c-b)/1

當為二維數組時,np.gradient(a) 得出兩個數組,第一個數組對應最外層維度的梯度,第二個數組對應第二層維度的梯度。 

  • 圖像的表示和變換

PIL, python image library 庫 
from PIL import Image 
Image是PIL庫中代表一個圖像的類(對象)

im = np.array(Image.open(“.jpg”))

im = Image.fromarray(b.astype(‘uint8’)) # 生成 
im.save(“路徑.jpg”) # 保存

im = np.array(Image.open(“.jpg”).convert(‘L’)) # convert(‘L’)表示轉為灰度圖

 補充:np.where:

返回符合某一條件的下標的函數,不過np.where()並不接受list類型的參數,可見np.where()既可以接收三個參數,用於三目運算,也可接收一個參數,返回符合條件的下標。

>>a = np.array(a) >>a array([1, 2, 3, 1, 2, 3, 1, 2, 3]) >>idx = np.where(a > 2) >>idx (array([2, 5, 8], dtype=int32),) >>a[idx] # 這種做法並不推薦 array([3, 3, 3]) >>a[a>2] # 推薦的做法 array([3, 3, 3]) 

注意,這種情況下,也即 np.where() 用於返回斷言成立時的索引,返回值的形式為 arrays of tuple,由 np.array 構成的 tuple,一般 tuple 的 len 為2(當判斷的對象是多維數組時),哪怕是一維數組返回的仍是 tuple,此時tuple 的 len 為 1;

  • np.where()[0] 表示行的索引,
  • np.where()[1] 則表示列的索引

np.where()用於三目運算的情況:

>>y = np.array([1, 2, 3, 4, 5, 6]) # 將奇數轉換為偶數,偶數轉換為奇數 >>y = np.where(y%2 == 0, y+1, y-1) #當符合條件y%2==0時是y+1,不符合是y-1,常用於根據一個數組產生另一個新的數組。 >>y array([0, 3, 2, 5, 4, 7])

 

 

 
 

# os 模塊

os.sep 可以取代操作系統特定的路徑分隔符。windows下為 '\\'
os.name 字符串指示你正在使用的平台。比如對於Windows,它是'nt',而對於Linux/Unix用戶,它是 'posix'
os.getcwd() 函數得到當前工作目錄,即當前Python腳本工作的目錄路徑
os.getenv() 獲取一個環境變量,如果沒有返回none
os.putenv(key, value) 設置一個環境變量值
os.listdir(path) 返回指定目錄下的所有文件和目錄名
os.remove(path) 函數用來刪除一個文件
os.system(command) 函數用來運行shell命令
os.linesep 字符串給出當前平台使用的行終止符。例如,Windows使用 '\r\n',Linux使用 '\n' 而Mac使用 '\r'
os.path.split(path)  函數返回一個路徑的目錄名和文件名
os.path.isfile() 和os.path.isdir()函數分別檢驗給出的路徑是一個文件還是目錄
os.path.exists() 函數用來檢驗給出的路徑是否真地存在
os.curdir  返回當前目錄 ('.')
os.mkdir(path) 創建一個目錄
os.makedirs(path) 遞歸的創建目錄
os.chdir(dirname) 改變工作目錄到dirname    
os.path.getsize(name) 獲得文件大小,如果name是目錄返回0L
os.path.abspath(name) 獲得絕對路徑
os.path.normpath(path) 規范path字符串形式
os.path.splitext()  分離文件名與擴展名
os.path.join(path,name) 連接目錄與文件名或目錄
os.path.basename(path) 返回文件名
os.path.dirname(path) 返回文件路徑
os.walk(top,topdown=True,onerror=None)  遍歷迭代目錄
os.rename(src, dst)  重命名file或者directory src到dst 如果dst是一個存在的directory, 將拋出OSError. 在Unix, 如果dst在存且是一個file, 如果用戶有權限的話,它將被安靜的替換. 操作將會失敗在某些Unix 中如果src和dst在不同的文件系統中. 如果成功, 這命名操作將會是一個原子操作 (這是POSIX 需要). 在 Windows上, 如果dst已經存在, 將拋出OSError,即使它是一個文件. 在unix,Windows中有效。
os.renames(old, new) 遞歸重命名文件夾或者文件。像rename()

# shutil 模塊

shutil.copyfile( src, dst) 從源src復制到dst中去。當然前提是目標地址是具備可寫權限。拋出的異常信息為IOException. 如果當前的dst已存在的話就會被覆蓋掉
shutil.move( src, dst)  移動文件或重命名
shutil.copymode( src, dst) 只是會復制其權限其他的東西是不會被復制的
shutil.copystat( src, dst) 復制權限、最后訪問時間、最后修改時間
shutil.copy( src, dst)  復制一個文件到一個文件或一個目錄
shutil.copy2( src, dst)  在copy上的基礎上再復制文件最后訪問時間與修改時間也復制過來了,類似於cp –p的東西
shutil.copy2( src, dst)  如果兩個位置的文件系統是一樣的話相當於是rename操作,只是改名;如果是不在相同的文件系統的話就是做move操作
shutil.copytree( olddir, newdir, True/Flase)
把olddir拷貝一份newdir,如果第3個參數是True,則復制目錄時將保持文件夾下的符號連接,如果第3個參數是False,則將在復制的目錄下生成物理副本來替代符號連接
shutil.rmtree( src ) 遞歸刪除一個目錄以及目錄內的所有內容


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM