Python numpy的基本操作你一般人都不會


前言 本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。 
PS:如有需要最新Python學習資料的小伙伴可以加點擊下方鏈接自行獲取
 http://note.youdao.com/noteshare?id=a3a533247e4c084a72c9ae88c271e3d1

來看正文:

0、NumPy 與 ndarry

NumPy 是 Python 科學計算的基礎包,它專為進行嚴格的數字處理而產生。

它提供:

  • 快速高效的多維數組對象 ndarray;
  • 直接對數組執行數學運算及對數組執行元素級計算的函數;
  • 線性代數運算、隨機數生成;
  • 將 C、C++、Fortran 代碼集成到 Python 的工具等。

它專為進行嚴格的數字處理而產生。多為很多大型金融公司使用,以及核心的科學計算組織如:Lawrence Livermore,NASA 用其處理一些本來使用 C++,Fortran 或Matlab 等所做的任務。

ndarray 是一個多維的數組對象,具有矢量算術運算能力和復雜的廣播能力,並具有執行速度快和節省空間的特點。

ndarray 的一個特點是同構:即其中所有元素的類型必須相同。

1、數組屬性查看:類型、尺寸、形狀、維度

import numpy as np a1 = np.array([1,2,3,4],dtype=np.complex128) print(a1) print("數據類型",type(a1)) #打印數組數據類型 print("數組元素數據類型:",a1.dtype) #打印數組元素數據類型 print("數組元素總數:",a1.size) #打印數組尺寸,即數組元素總數 print("數組形狀:",a1.shape) #打印數組形狀 print("數組的維度數目:",a1.ndim) #打印數組的維度數目 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2、numpy元素中數據存儲方式,數據類型,類型轉換

2.1 查看元素數據存儲類型

dtype=。。。 可作為參數輸入到之后的類型轉換新array建立函數中,作為array初始化的參數選擇。

import numpy as np #指定數據 dtype a = np.array([2,23,4],dtype=np.int) print(a.dtype) # int 64 a = np.array([2,23,4],dtype=np.int32) print(a.dtype) # int32 a = np.array([2,23,4],dtype=np.float) print(a.dtype) # float64 a = np.array([2,23,4],dtype=np.float32) print(a.dtype) # float32 a = np.array([1,2,3,4],dtype=np.complex128) print(a.dtype) # complex128 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

2.2 元素數據存儲類型轉換

import numpy as np # 通過 ndarray 的 astype() 方法進行強制類型轉換 # astype 會創建一份新的數組,即便是指定為同類型也依然如此 # 浮點數轉換為整數時小數部分會被舍棄: a = np.array([2.5,3.1,4.9],dtype=np.float32) b = a.astype(np.int64) print(b.dtype) print(b) # 如果某字符串類型的數組里的元素全是數字,也可以通過此方法直接轉換成數值類型 a = np.array(["2.5","3.1","4.9"],dtype=np.float32) b = a.astype(np.float64) print(b.dtype) print(b) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3、List類型與numpy. ndarray類型的互相轉換

array函數接受一切序列類型的對象

import numpy as np list1 = [1,2,3,4,5] #List轉numpy.array: temp = np.array(list1) print(temp) print("數據類型",type(temp)) #打印數組數據類型 print("數組元素數據類型:",temp.dtype) #打印數組元素數據類型 print("數組元素總數:",temp.size) #打印數組尺寸,即數組元素總數 print("數組形狀:",temp.shape) #打印數組形狀 #numpy.array轉List: arr = temp.tolist() print(arr) print("數據類型",type(arr)) #打印數組數據類型 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

4、創建 ndarray 數組

4.1 方法一:列表轉換

import numpy as np #創建數組 array = np.array([[1,2,3],[2,3,4]]) #列表轉化為矩陣 print(array) print('number of dim:',array.ndim) # 維度 # number of dim: 2 print('shape :',array.shape) # 行數和列數 # shape : (2, 3) print('size:',array.size) # 元素個數 # size: 6 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4.2 zero,ones,empty函數創建特殊數組

zeros() 函數和 ones() 函數這兩個函數分別可以創建指定長度或形狀的全0或全1的 ndarray 數組

empty() 函數這個函數可以創建一個沒有任何具體值的 ndarray 數組,需要注意一點的是,這個函數返回的值不一定是 0,可能是其他未初始化的垃圾值。

import numpy as np #創建全零數組 a = np.zeros((3,4)) # 數據全為0,3行4列 print('a:',a) b = np.zeros(a.shape) # 數據全為0,3行4列 print('b:',b) #創建全一數組, 同時也能指定這些特定數據的 dtype: a = np.ones((3,4),dtype = np.int) # 數據為1,3行4列 print('a:',a) b = np.ones(a.shape) # 數據全為0,3行4列 print('b:',b) #創建全空數組, 其實每個值都是接近於零的數: a = np.empty((3,4)) # 數據為empty,3行4列 print('a:',a) b = np.empty(a.shape) # 數據全為0,3行4列 print('b:',b) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

4.3 arrange linspace 創建線性數組

import numpy as np #用 arange 創建連續數組: a = np.arange(10,20,2) # 10-19 的數據,2步長 print(a) #使用 reshape 改變數據的形狀 a = np.arange(12).reshape((3,4)) # 3行4列,0到11 print(a) #用 linspace 創建線段型數據: a = np.linspace(1,10,20) # 開始端1,結束端10,且分割成20個數據,生成線段 print(a) #同樣也能進行 reshape 工作: a = np.linspace(1,10,20).reshape((5,4)) # 更改shape print(a) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

5、矩陣的索引與打印

import numpy as np #一維索引 A = np.arange(3,15) print('A = ',A) print('A[3] = ',A[3]) # 6 #二維 A = np.arange(3,15).reshape((3,4)) print('A = ',A) print('A[2] = ',A[2]) print('A[2][]2 = ',A[2][2]) print('A[2,2] = ',A[2,2]) print('A[1, 1:3] = ',A[1, 1:3]) print('row = ') for row in A: print(row) print('column = ') for column in A.T: print(column) #flatten是一個展開性質的函數,將多維的矩陣進行展開成1行的數列。而flat是一個迭代器,本身是一個object屬性。 print('A.flatten = ',A.flatten()) print('A.flat ===== 所有元素逐個打印') for item in A.flat: print(item) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

6、矩陣的運算

6.1 基礎運算

import numpy as np array1 = np.array([[1,2,3],[2,3,4]]) #列表轉化為矩陣 array2 = np.array([[2,3,4],[3,4,5]]) #列表轉化為矩陣 # 減法 array3 = array2 - array1 print(array3) # 加法 array3 = array2 + array1 print(array3) # 對應元素相乘 array3 = array2 * array1 print(array3) # 對應元素乘系數 array4 = array1 * 2 print(array4) # 對應元素次方 array4 = array1 ** 2 print(array4) # 對應元素正弦 array4 = np.sin(array1) print(array4) # 比較符號 array5 = array1>2 print(array5) # 判斷矩陣是否全部為正確 print(array5.all()) # 判斷矩陣是否存在正確 print(array5.any()) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

6.2 點乘

import numpy as np arr1=np.array([[1,1],[0,1]]) arr2=np.arange(4).reshape((2,2))# 形變 print(arr1) print(arr2) # 點乘運算 arr3 = np.dot(arr1,arr2) print(arr3) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

6.3 其他矩陣特征運算

import numpy as np A = np.arange(2,14).reshape((3,4)) print("A =",A) print("sum =",np.sum(A,axis=1)) print("min =",np.min(A,axis=0)) print("max =",np.max(A,axis=1)) print("全矩陣mean =",np.average(A)) print("不同維度mean =",np.average(A,axis=0)) print("全矩陣mean =",np.mean(A)) print("不同維度mean =",np.mean(A,axis=1)) print("中位數 = ",np.median(A)) # 7.5中位數 # argmin() 和 argmax() 兩個函數分別對應着求矩陣中最小元素和最大元素的索引。 # 相應的,在矩陣的12個元素中,最小值即2,對應索引0,最大值為13,對應索引為11。 print("最小值索引",np.argmin(A)) # 0 print("最大值索引",np.argmax(A)) # 11 print("累加矩陣 = ",np.cumsum(A)) #累加函數 (返回的是以為數組) 生成的矩陣每一個元素均是從原矩陣首項累加到對應項的元素之和 print("累差矩陣 = ",np.diff(A)) #累差運算函數 x,y = np.nonzero(A) #將所有非零元素的行與列坐標分割開,重構成兩個分別關於行和列的矩陣 print("非零行坐標 = ",x) print("非零列坐標 = ",y) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

6.3 排序、轉置、數值裁剪

import numpy as np A = np.arange(14,2, -1).reshape((3,4)) print("A = ",A) print("A默認維度排序 = ",np.sort(A)) print("A其他維度排序 = ",np.sort(A,axis = 0)) print("A轉置 = ",np.transpose(A)) #轉置 print("A轉置 = ",A.T)#轉置 print("矩陣數值裁剪 = ",np.clip(A,5,9)) #后面的最小值最大值則用於讓函數判斷矩陣中元素是否有比最小值小的或者比最大值大的元素,並將這些指定的元素轉換為最小值或者最大值。 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

7、其他操作

7.1 橫縱向的拼接

import numpy as np A = np.array([1,1,1]) B = np.array([2,2,2]) # vertical stack上下合並 C = np.vstack((A,B)) print(C.shape) print(C) # horizontal stack左右合並 D = np.hstack((A,B)) print(D.shape) print(D) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

A = np.array([[1,1,1],[1,1,1]]) B = np.array([[2,2,2],[2,2,2]]) C = np.concatenate((A,B,B,A),axis=0) print("(A,B,B,A),axis=0 = ") print(C) D = np.concatenate((A,B,B,A),axis=1) print("(A,B,B,A),axis=1 = ") print(D) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

7.2 矩陣添加或拼接新元素(append或concatenate)

import numpy as np A = np.array([1,1,1]) B = np.concatenate((A,[100])) # 先將p_變成list形式進行拼接,注意輸入為一個tuple C = np.append(B,200) #直接向p_arr里添加p_ #注意一定不要忘記用賦值覆蓋原p_arr不然不會變 print(B.shape) print(B) print(C.shape) print(C) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

7.3 新增維度

import numpy as np #這樣改變維度的作用往往是將一維的數據轉變成一個矩陣,與代碼后面的權重矩陣進行相乘, 否則單單的數據是不能呢這樣相乘的哦。 A = np.array([1,1,1]) print(type(np.newaxis)) print(np.newaxis==None)#np.newaxis 在使用和功能上等價於 None print("A:",A) print("A.shape:",A.shape) print("A[np.newaxis,:]:",A[np.newaxis,:]) print("A[np.newaxis,:].shape:",A[np.newaxis,:].shape) print("A[:,np.newaxis]:",A[:,np.newaxis]) print("A[:,np.newaxis].shape:",A[:,np.newaxis].shape) print("A[np.newaxis,:,np.newaxis].shape:",A[np.newaxis,:,np.newaxis].shape) # (3,1) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

7.4 增減數組維度

import numpy as np # 假設a的shape為[1000,128,128] a = np.random.rand(1000,128,128) print(a.shape) # expand_dims為增加內容為空的維度 b=np.expand_dims(a,axis=0) print(b.shape) b=np.expand_dims(a,axis=1) print(b.shape) b=np.expand_dims(a,axis=2) print(b.shape) b=np.expand_dims(a,axis=3) print(b.shape) # squeeze為刪除內容為空的維度 c=np.squeeze(b) print(c.shape) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

7.5 矩陣的切片

import numpy as np A = np.arange(12).reshape((3, 4)) print("A = ") print(A) B1,B2 = np.split(A, 2, axis=1)# 返回的是一個列表 里面兩個元素分別為切片后的array矩陣 print(np.split(A, 2, axis=1)) print("B1 = ",B1) print("B2 = ",B2) C1,C2,C3 = np.split(A, 3, axis=0) print(np.split(A, 3, axis=0)) print("C1 = ",C1) print("C2 = ",C2) print("C3 = ",C3) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

import numpy as np A = np.arange(12).reshape((3, 4)) D1,D2,D3 = np.array_split(A, 3, axis=1) print(np.array_split(A, 3, axis=1)) print(D1) print(D2) print(D3) E1,E2,E3 = np.vsplit(A, 3) # 縱向切割 print(np.vsplit(A, 3)) print(E1) print(E2) print(E3) F1,F2 = np.hsplit(A, 2) # 水平切割 print(np.hsplit(A, 2)) print(F1) print(F2) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

7.6 reshape,ravel,flatten,transpose,shape,resize更改數組形狀

import numpy as np a = np.arange(24) print('a = ',a) b = a.reshape(2,3,4) print('reshape = ',b) # ravel函數 可以將多維數組展平(也就是變回一維) c = b.ravel() print('ravel = ',c) # flatten函數 也是將多維數組展平,與ravel函數的功能相同,不過flatten函數會請求分配內存來保存結果,而ravel函數只是返回數組的一個視圖(view) c = b.flatten() print('flatten = ',c) # 這種做法將直接改變所操作的數組 b.shape = (6,4) print('重新設置形狀',b) # transpose函數 將矩陣進行轉置 d = b.transpose() print("轉置 = ",d) # resize函數 和reshape函數的功能一樣,但resize會直接修改所操作的數組 # 並且這一步不可以通過賦值來實現,如下所示 b.resize((2,12)) print('resize重新設置形狀',b) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

8、常用操作

8.1 元素平方和

np.sum(arrayname**2) 
  • 1

8.2 numpy轉換成tensorflow的tensor

import numpy as np import tensorflow as tf numpy_test = np.ones(5) print(numpy_test) print(numpy_test.shape) tensor_test = tf.convert_to_tensor(numpy_test) print(tensor_test) print(tensor_test.shape) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

LAST、未來得及添加的內容

numpy random 生成隨機矩陣

np.random.choice的用法

numpy:np.random.choice的用法

np.random.choice用法中文和樣例詳解

numpy.linspace使用詳解

Numpy 中clip函數的使用

np.max 與 np.maximum

Numpy中stack(),hstack(),vstack()函數詳解

numpy中loadtxt 的用法

【Python數據分析】Numpy的詳細教程

numpy&pandas莫煩

 


免責聲明!

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



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