Numpy基础(part2)--ndarray数组
鄙人學(xué)習(xí)筆記,這個筆記以例子為主。
開發(fā)工具:Spyder
文章目錄
- ndarray數(shù)組對象的維度操作
- 視圖變維(數(shù)據(jù)共享)
- 復(fù)制變維(數(shù)據(jù)獨立)
- 就地變維
- ndarray數(shù)組切片操作
- 多維數(shù)組的切片操作
- ndarray數(shù)組的掩碼操作
- 多維數(shù)組的組合和拆分
- 垂直方向操作
- 水平方向操作
- 深度方向操作(3維)
- 長度不等的數(shù)組組合
- 多維數(shù)組組合與拆分的相關(guān)函數(shù)
- 簡單的一維數(shù)組組合方案
- ndarray類的其他屬性
ndarray數(shù)組對象的維度操作
視圖變維(數(shù)據(jù)共享)
舉例:若a與b共用同一個數(shù)據(jù),若把b改了,則a也變了。
相關(guān)函數(shù):reshape() 與 ravel()
- 例子1
代碼:
import numpy as np a = np.arange(1, 9) print('a:', a) # [1 2 3 4 5 6 7 8] b = a.reshape(2, 4) #視圖變維 : 變?yōu)?行4列的二維數(shù)組 print('b:',b) c = b.reshape(2, 2, 2) #視圖變維 變?yōu)?頁2行2列的三維數(shù)組 print('c:',c) d = c.ravel() #視圖變維 變?yōu)?維數(shù)組 print('d:',d)結(jié)果:
- 例子2
代碼1:
import numpy as np a = np.arange(1, 10) print(a, a.shape) b = a.reshape(3, 3) print(b, b.shape) b[0, 0] = 98 print(a, a.shape)結(jié)果1:
代碼2:
import numpy as np a = np.arange(1, 10) b = a.reshape(3, 3) b[0, 0] = 98 c = b.ravel() print('c:', c, c.shape) print('a:', a, a.shape)結(jié)果2:
復(fù)制變維(數(shù)據(jù)獨立)
舉例:通過a得到一個b,雖然數(shù)據(jù)內(nèi)容是一樣的,但卻是兩份數(shù)據(jù),他們的地址不同。
相關(guān)函數(shù):flatten()
- 例子
代碼:
import numpy as np a = np.arange(1, 10) b = a.reshape(3, 3) b[0, 0] = 98 c = b.flatten() c[2] = 53 print('c:', c, c.shape) print('b:', b, b.shape) print('a:', a, a.shape)結(jié)果:
就地變維
含義:直接改變原數(shù)組對象的維度,不返回新數(shù)組。
相關(guān)函數(shù):shape()與resize()
- 例子
代碼:
import numpy as np a = np.arange(1, 9) print('a:', a) a.shape = (2, 4) print("a", a) a.resize(2, 2, 2) print('a:', a)結(jié)果:
ndarray數(shù)組切片操作
- 語法
- 說明
①默認位置步長為1;步長為+時,默認切從首到尾;步長為-時,默認切從尾到首。
②數(shù)組對象切片的參數(shù)設(shè)置與列表切面參數(shù)類似
- 例子(還需繼續(xù)研究)
備注:若為若為[:]或[ : : ]則為復(fù)制。
多維數(shù)組的切片操作
- 例子1
代碼:
import numpy as np a = np.arange(1, 28) a.resize(3,3,3) print('a:', a, '\n') print('切出第1頁:', a[0, :, :], '\n') print('切出所有頁的第2行:', a[:, 1, :], '\n') print('切出第1頁的第3列:',a[0, :, 2])結(jié)果:
- 例子2
代碼:
import numpy as np a = np.arange(1, 28) a.resize(3,3,3)print(a[:, :2, :], '\n') print('--------------') print(a[:2, :2, :2])結(jié)果:
ndarray數(shù)組的掩碼操作
掩碼是啥?看下面這段代碼:
被藍色矩形框起來的就是掩碼。
- 例子1
代碼:
import numpy as np a = np.arange(1, 20)mask = [a % 3 == 0] print(mask) print(a[mask])結(jié)果:
- 例子2
代碼:
import numpy as np a = np.arange(1, 50)mask = [(a % 3 == 0) & (a % 5 == 0)] print(mask) print(a[mask])結(jié)果:
- 例子3(使用掩碼把數(shù)組中的元素重新排列)
代碼:
import numpy as np a = np.array(['a', 'b', 'c', 'd', 'e'])mask = [2, 4, 1, 0, 2, 3, 1] print(a[mask])結(jié)果:
多維數(shù)組的組合和拆分
垂直方向操作
相關(guān)函數(shù):vstack()與vsplit()
- 例子
代碼:
import numpy as np a = np.arange(1, 7).reshape(2, 3) b = np.arange(7, 13).reshape(2, 3) # 垂直方向完成組合操作,生成新數(shù)組 c = np.vstack((a, b)) print('c:', c) # 垂直方向完成拆分操作,生成兩個數(shù)組 d, e = np.vsplit(c, 2) print('d:', d) print('e:', e)結(jié)果:
垂直方向拆分是分成上下兩份。
水平方向操作
相關(guān)函數(shù):hstack()與hsplit()
- 例子
代碼:
import numpy as np a = np.arange(1, 7).reshape(2, 3) b = np.arange(7, 13).reshape(2, 3) # 水平方向完成組合操作,生成新數(shù)組 c = np.hstack((a, b)) print('c:', c) # 水平方向完成拆分操作,生成兩個數(shù)組 d, e = np.hsplit(c, 2) print('d:', d) print('e:', e)結(jié)果:
水平方向拆分是分成左右兩塊。
深度方向操作(3維)
相關(guān)函數(shù):dstack()與dsplit()
- 例子
代碼:
import numpy as np a = np.arange(1, 7).reshape(2, 3) b = np.arange(7, 13).reshape(2, 3) # 深度方向(3維)完成組合操作,生成新數(shù)組 c = np.dstack((a, b)) # 深度方向(3維)完成拆分操作,生成兩個數(shù)組 d, e = np.dsplit(c, 2) print('c:', c) print('d:', d) print('e:', e)結(jié)果:
長度不等的數(shù)組組合
相關(guān)函數(shù):pad()
- 例子
代碼:
import numpy as np a = np.array([1,2,3,4,5]) b = np.array([1,2,3,4]) # 填充b數(shù)組使其長度與a相同 # 前補0個元素,后補1個元素,都補上-1 b = np.pad(b, pad_width=(0, 1), mode='constant', constant_values=-1) print('b:', b) # 垂直方向完成組合操作,生成新數(shù)組 c = np.vstack((a, b)) print('c:', c)結(jié)果:
多維數(shù)組組合與拆分的相關(guān)函數(shù)
相關(guān)函數(shù):concatenate()與split()
相關(guān)函數(shù)的用法:
np.concatenate((數(shù)組a, 數(shù)組b), axis=0) # 通過axis作為關(guān)鍵字參數(shù)指定組合的方向,取值如下: # 若待組合的數(shù)組都是二維數(shù)組: # 0: 垂直方向組合 # 1: 水平方向組合 # 若待組合的數(shù)組都是三維數(shù)組: # 0: 垂直方向組合 # 1: 水平方向組合 # 2: 深度方向組合 np.split(數(shù)組, 要拆分的份數(shù), axis=0) # 通過給出的數(shù)組與要拆分的份數(shù),按照某個方向進行拆分,axis的取值同上簡單的一維數(shù)組組合方案
相關(guān)函數(shù):row_stack()與column_stack()
- 例子
代碼:
import numpy as np a = np.arange(1,9) #[1, 2, 3, 4, 5, 6, 7, 8] b = np.arange(9,17) #[9,10,11,12,13,14,15,16] #把兩個數(shù)組摞在一起成兩行 c = np.row_stack((a, b)) print(c) #把兩個數(shù)組組合在一起成兩列 d = np.column_stack((a, b)) print(d)結(jié)果:
ndarray類的其他屬性
| shape | 維度 |
| dtype | 元素類型 |
| size | 元素數(shù)量 |
| ndim | 維數(shù),len(shape) |
| itemsize | 元素字節(jié)數(shù) |
| nbytes | 總字節(jié)數(shù) = size * itemsize |
| real | 復(fù)數(shù)數(shù)組的實部數(shù)組 |
| imag | 復(fù)數(shù)數(shù)組的虛部數(shù)組 |
| T | 數(shù)組對象的轉(zhuǎn)置視圖 |
| flat | 扁平迭代器 |
備注:flat可以拿到數(shù)組中的每一個元素組成的迭代器。
- 例子
代碼:
import numpy as np a = np.array([[1 + 1j, 2 + 4j, 3 + 7j],[4 + 2j, 5 + 5j, 6 + 8j],[7 + 3j, 8 + 6j, 9 + 9j]]) print(a.shape) print(a.dtype) print(a.ndim) print(a.size) print(a.itemsize) print(a.nbytes) print("-----------")print(a.real, a.imag, sep='\n') print("-----------") print(a.T) print("-----------") print([elem for elem in a.flat]) print("-----------") b = a.tolist() print(b)備注:data.tolist()函數(shù)為轉(zhuǎn)換成列表。
結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的Numpy基础(part2)--ndarray数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Numpy基础(part1)--ndar
- 下一篇: Matplotlib基础(part1)-