学习笔记——Numpy基本操作(一)
為了方便學習,我把本文介紹的一些函數先列舉下
數組屬性
ndarray.ndim
ndarray.shape
創建數組
numpy.empty、numpy.zeros、numpy.ones初始化
數值范圍創建數組
切片
數組操作
numpy.reshape
ndarray.flatten
numpy.concatenate
numpy.hstack
numpy.vstack
文章目錄
- Numpy 介紹
- 基本運算
- Ndarray 數據結構
- 屬性
- 數組的軸(重點)
- 基本操作詳解
- NumPy 數組屬性
- NumPy 創建數組
- NumPy 廣播(Broadcast)
- Numpy 數組操作
Numpy 介紹
NumPy(Numerical Python) 是 Python語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。
NumPy的前身 Numeric 最早是由 Jim Hugunin 與其它協作者共同開發,2005年,Travis Oliphant 在 Numeric中結合了另一個同性質的程序庫 Numarray 的特色,并加入了其它擴展而開發了 NumPy。NumPy 為開放源代碼并且由許多協作者共同維護開發。
包括:
- 一個強大的 N 維數組對象 ndarray
- 廣播功能函數
- 整合 C/C++/Fortran 代碼的工具
- 線性代數、傅里葉變換、隨機數生成等功能
基本運算
Ndarray 數據結構
NumPy 最重要的一個特點是其 N 維數組對象 ndarray(張量 Tensor 部分略去,請有興趣自行研究),它是一系列同類型數據的集合,以 0下標為開始進行集合中元素的索引。ndarray對象是用于存放同類型元素的多維數組。ndarray中的每個元素在內存中都有相同存儲大小的區域。
numpy 支持的數據類型比 Python 內置的類型要多很多,基本上可以和 C 語言的數
據類型對應上,其中部分類型對應為 Python 內置的類型。
屬性
NumPy 的數組中比較重要 ndarray 對象屬性有:
數組的軸(重點)
axis = 0 代表列方向
axis = 1 代表水平方向
axis = 0 代表往里面的方向
基本操作詳解
NumPy 數組屬性
1、ndarray.ndim 用于返回數組的維數,等于秩
import numpy as np a = np.arange(24) print ('a的維數:',a.ndim) # a 現只有一個維度 # 現在調整其大小 b = a.reshape(2,4,3) # b 現在擁有三個維度 print ('b的維數:',b.ndim)--------------------------- 執行結果: a的維數: 1 b的維數: 32、ndarray.shape 也可以用于調整數組大小
import numpy as np a = np.array([[1,2,3],[4,5,6]]) print (a.shape)--------------------------- 執行結果: (2, 3) import numpy as np a = np.array([[1,2,3],[4,5,6]]) b = a.reshape(3,2) print (b)---------------------------- 執行結果: [[1 2][3 4][5 6]]NumPy 創建數組
1、numpy.empty、numpy.zeros、numpy.ones初始化
import numpy as np x = np.empty([3,2], dtype = int) print (x)----------------------- 執行結果: [[1 2][3 4][5 6]] import numpy as np# 默認為浮點數 x = np.zeros(5) print(x) print('') # 設置類型為整數 y = np.zeros((5,), dtype = np.int) print(y) print('') # 自定義類型 z = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')]) print(z)------------------------ 執行結果: [0. 0. 0. 0. 0.][0 0 0 0 0][[(0, 0) (0, 0)][(0, 0) (0, 0)]] import numpy as np# 默認為浮點數 x = np.ones(5) print(x)# 自定義類型 x = np.ones([2,2], dtype = int) print(x)-------------------- 執行結果: [1. 1. 1. 1. 1.] [[1 1][1 1]]2、NumPy 從數值范圍創建數組
import numpy as npx = np.arange(5) print (x)----------------- 執行結果: [0 1 2 3 4] import numpy as np# 設置了 dtype x = np.arange(5, dtype = float) print (x)------------------- 執行結果: [0. 1. 2. 3. 4.] import numpy as np a = np.linspace(1,10,10) print(a)------------------- 執行結果: [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]3、切片
import numpy as npa = np.arange(10) print(a[2:])-------------------- 執行結果: [2 3 4 5 6 7 8 9] import numpy as npa = np.arange(10) # [0 1 2 3 4 5 6 7 8 9] print(a[2:5])-------------------- 執行結果: [2 3 4] import numpy as npa = np.array([[1,2,3],[3,4,5],[4,5,6]], dtype=float) print(a) # 從某個索引處開始切割 print('從數組索引 a[1:] 處開始切割') print(a[1:])------------------ 執行結果: [[1. 2. 3.][3. 4. 5.][4. 5. 6.]] 從數組索引 a[1:] 處開始切割 [[3. 4. 5.][4. 5. 6.]] import numpy as npa = np.array([[1,2,3],[3,4,5],[4,5,6]]) print (a[...,1]) # 第2列元素 print (a[1,...]) # 第2行元素 print (a[...,1:]) # 第2列及剩下的所有元素--------------- 執行結果: [2 4 5] [3 4 5] [[2 3][4 5][5 6]] import numpy as npa = np.array([[1,2,3], [4,5,6],[7,8,9]]) b = a[1:3, 1:3] c = a[1:3,[1,2]] d = a[...,1:] print(b) print(c) print(d)----------------- 執行結果: [[5 6][8 9]] [[5 6][8 9]] [[2 3][5 6][8 9]]NumPy 廣播(Broadcast)
廣播(Broadcast)是 numpy 對不同形狀(shape)的數組進行數值計算的方式, 對數組的算術運算通常在相應的元素上進行。如果兩個數組 a 和 b 形狀相同,即滿足 a.shape == b.shape,那么 a*b 的結果就是 a 與 b 數組對應位相乘。這要求維數相同,且各維度的長度相同。
import numpy as np a = np.array([1,2,3,4]) b = np.array([10,20,30,40]) c = a * b print (c)----------------- 執行結果: [ 10 40 90 160]當運算中的 2 個數組的形狀不同時,numpy 將自動觸發廣播機制。如:
import numpy as np a = np.array([[ 0, 0, 0],[10,10,10],[20,20,20],[30,30,30]]) b = np.array([1,2,3]) print(a + b)------------------ 執行結果: [[ 1 2 3][11 12 13][21 22 23][31 32 33]]Numpy 數組操作
numpy.reshape 函數可以在不改變數據的條件下修改形狀,格式如下: numpy.reshape(arr, newshape, order='C')
import numpy as npa = np.arange(8) print ('原始數組:') print (a) print ('') b = a.reshape(4,2) print ('修改后的數組:') print (b)------------------- 執行結果: 原始數組: [0 1 2 3 4 5 6 7]修改后的數組: [[0 1][2 3][4 5][6 7]]numpy.ndarray.flatten 返回一份數組拷貝,對拷貝所做的修改不會影響原始數組,格式如下:
ndarray.flatten(order='C'),order:‘C’ – 按行,‘F’ – 按列,‘A’ – 原順序,‘K’ – 元素在內存中的出現順序。
import numpy as npa = np.arange(8).reshape(2,4)print ('原數組:') print (a) print ('') # 默認按行print ('展開的數組:') print (a.flatten()) print ('')print ('以 F 風格順序展開的數組:') print (a.flatten(order = 'F'))------------------- 執行結果: 原數組: [[0 1 2 3][4 5 6 7]]展開的數組: [0 1 2 3 4 5 6 7]以 F 風格順序展開的數組: [0 4 1 5 2 6 3 7] import numpy as npa = np.arange(12).reshape(3,4)print ('原數組:') print (a) print ('')print ('轉置數組:') print (a.T)------------------ 執行結果: 原數組: [[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]]轉置數組: [[ 0 4 8][ 1 5 9][ 2 6 10][ 3 7 11]]連接數組
numpy.concatenate 函數用于沿指定軸連接相同形狀的兩個或多個數組
import numpy as npa = np.array([[1,2],[3,4]])print ('第一個數組:') print (a) print ('') b = np.array([[5,6],[7,8]])print ('第二個數組:') print (b) print ('') # 兩個數組的維度相同print ('沿軸 0 連接兩個數組:') print (np.concatenate((a,b))) print ('')print ('沿軸 1 連接兩個數組:') print (np.concatenate((a,b),axis = 1))---------------- 執行結果: 第一個數組: [[1 2][3 4]]第二個數組: [[5 6][7 8]]沿軸 0 連接兩個數組: [[1 2][3 4][5 6][7 8]]沿軸 1 連接兩個數組: [[1 2 5 6][3 4 7 8]]numpy.hstack 是 numpy.stack 函數的變體,它通過水平堆疊來生成數組。
import numpy as npa = np.array([[1,2],[3,4]])print ('第一個數組:') print (a) print ('') b = np.array([[5,6],[7,8]])print ('第二個數組:') print (b) print ('')print ('水平堆疊:') c = np.hstack((a,b)) print (c) print ('')-------------------------- 執行結果; 第一個數組: [[1 2][3 4]]第二個數組: [[5 6][7 8]]水平堆疊: [[1 2 5 6][3 4 7 8]]numpy.vstack 是 numpy.stack 函數的變體,它通過垂直堆疊來生成數組。
import numpy as npa = np.array([[1,2],[3,4]])print ('第一個數組:') print (a) print ('') b = np.array([[5,6],[7,8]])print ('第二個數組:') print (b) print ('')print ('豎直堆疊:') c = np.vstack((a,b)) print (c)---------------------- 執行結果: 第一個數組: [[1 2][3 4]]第二個數組: [[5 6][7 8]]豎直堆疊: [[1 2][3 4][5 6][7 8]]總結
以上是生活随笔為你收集整理的学习笔记——Numpy基本操作(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记(十三)——vim编辑与linu
- 下一篇: Qt窗口、控件、文本等的一些常用操作