日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Numpy基础(part2)--ndarray数组

發(fā)布時間:2023/12/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Numpy基础(part2)--ndarray数组 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

鄙人學(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ù)組切片操作

  • 語法
數(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。