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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Numpy基础(part2)--ndarray数组

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

鄙人學習筆記,這個筆記以例子為主。
開發工具:Spyder


文章目錄

      • ndarray數組對象的維度操作
        • 視圖變維(數據共享)
        • 復制變維(數據獨立)
        • 就地變維
      • ndarray數組切片操作
      • 多維數組的切片操作
      • ndarray數組的掩碼操作
      • 多維數組的組合和拆分
        • 垂直方向操作
        • 水平方向操作
        • 深度方向操作(3維)
        • 長度不等的數組組合
        • 多維數組組合與拆分的相關函數
        • 簡單的一維數組組合方案
      • ndarray類的其他屬性


ndarray數組對象的維度操作

視圖變維(數據共享)

舉例:若a與b共用同一個數據,若把b改了,則a也變了。
相關函數: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) #視圖變維 : 變為2行4列的二維數組 print('b:',b) c = b.reshape(2, 2, 2) #視圖變維 變為2頁2行2列的三維數組 print('c:',c) d = c.ravel() #視圖變維 變為1維數組 print('d:',d)

結果:

  • 例子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)

結果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)

結果2:

復制變維(數據獨立)

舉例:通過a得到一個b,雖然數據內容是一樣的,但卻是兩份數據,他們的地址不同。
相關函數: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)

結果:

就地變維

含義:直接改變原數組對象的維度,不返回新數組。
相關函數: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)

結果:

ndarray數組切片操作

  • 語法
數組對象[起始位置:終止位置:步長]
  • 說明

①默認位置步長為1;步長為+時,默認切從首到尾;步長為-時,默認切從尾到首。
②數組對象切片的參數設置與列表切面參數類似

  • 例子(還需繼續研究)

備注:若為若為[:]或[ : : ]則為復制。

多維數組的切片操作

  • 例子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])

結果:

  • 例子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])

結果:

ndarray數組的掩碼操作

掩碼是啥?看下面這段代碼:

被藍色矩形框起來的就是掩碼。

  • 例子1

代碼:

import numpy as np a = np.arange(1, 20)mask = [a % 3 == 0] print(mask) print(a[mask])

結果:

  • 例子2

代碼:

import numpy as np a = np.arange(1, 50)mask = [(a % 3 == 0) & (a % 5 == 0)] print(mask) print(a[mask])

結果:

  • 例子3(使用掩碼把數組中的元素重新排列)

代碼:

import numpy as np a = np.array(['a', 'b', 'c', 'd', 'e'])mask = [2, 4, 1, 0, 2, 3, 1] print(a[mask])

結果:

多維數組的組合和拆分

垂直方向操作

相關函數:vstack()與vsplit()

  • 例子

代碼:

import numpy as np a = np.arange(1, 7).reshape(2, 3) b = np.arange(7, 13).reshape(2, 3) # 垂直方向完成組合操作,生成新數組 c = np.vstack((a, b)) print('c:', c) # 垂直方向完成拆分操作,生成兩個數組 d, e = np.vsplit(c, 2) print('d:', d) print('e:', e)

結果:

垂直方向拆分是分成上下兩份。

水平方向操作

相關函數:hstack()與hsplit()

  • 例子

代碼:

import numpy as np a = np.arange(1, 7).reshape(2, 3) b = np.arange(7, 13).reshape(2, 3) # 水平方向完成組合操作,生成新數組 c = np.hstack((a, b)) print('c:', c) # 水平方向完成拆分操作,生成兩個數組 d, e = np.hsplit(c, 2) print('d:', d) print('e:', e)

結果:

水平方向拆分是分成左右兩塊。

深度方向操作(3維)

相關函數:dstack()與dsplit()

  • 例子

代碼:

import numpy as np a = np.arange(1, 7).reshape(2, 3) b = np.arange(7, 13).reshape(2, 3) # 深度方向(3維)完成組合操作,生成新數組 c = np.dstack((a, b)) # 深度方向(3維)完成拆分操作,生成兩個數組 d, e = np.dsplit(c, 2) print('c:', c) print('d:', d) print('e:', e)

結果:

長度不等的數組組合

相關函數:pad()

  • 例子

代碼:

import numpy as np a = np.array([1,2,3,4,5]) b = np.array([1,2,3,4]) # 填充b數組使其長度與a相同 # 前補0個元素,后補1個元素,都補上-1 b = np.pad(b, pad_width=(0, 1), mode='constant', constant_values=-1) print('b:', b) # 垂直方向完成組合操作,生成新數組 c = np.vstack((a, b)) print('c:', c)

結果:

多維數組組合與拆分的相關函數

相關函數:concatenate()與split()

相關函數的用法:

np.concatenate((數組a, 數組b), axis=0) # 通過axis作為關鍵字參數指定組合的方向,取值如下: # 若待組合的數組都是二維數組: # 0: 垂直方向組合 # 1: 水平方向組合 # 若待組合的數組都是三維數組: # 0: 垂直方向組合 # 1: 水平方向組合 # 2: 深度方向組合 np.split(數組, 要拆分的份數, axis=0) # 通過給出的數組與要拆分的份數,按照某個方向進行拆分,axis的取值同上

簡單的一維數組組合方案

相關函數: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] #把兩個數組摞在一起成兩行 c = np.row_stack((a, b)) print(c) #把兩個數組組合在一起成兩列 d = np.column_stack((a, b)) print(d)

結果:

ndarray類的其他屬性

屬性含義
shape維度
dtype元素類型
size元素數量
ndim維數,len(shape)
itemsize元素字節數
nbytes總字節數 = size * itemsize
real復數數組的實部數組
imag復數數組的虛部數組
T數組對象的轉置視圖
flat扁平迭代器

備注:flat可以拿到數組中的每一個元素組成的迭代器。

  • 例子

代碼:

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()函數為轉換成列表。

結果:

總結

以上是生活随笔為你收集整理的Numpy基础(part2)--ndarray数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。