系列文章目錄
文章目錄
- 系列文章目錄
- 前言
- 一、NumPy簡介
- 二、NumPy入門
- 三、NumPy創建
- 四、NumPy數組索引
- 五、NumPy數組裁切
- 六、NumPy數據類型
- 七、NumPy副本/視圖
- 八、NumPy數據形狀
- 九、NumPy數組重塑
- 十、NumPy數組迭代
- 總結
前言
一、NumPy簡介
1、什么是Numpy?
NumPy是用于處理數組的python庫。它還擁有在線性代數,傅里葉變換和矩陣領域中工作的函數。
2、為什么使用Numpy?
在python中,我沒有滿足數組功能的列表,但是處理起來很慢,Numpy旨在提供一個比傳統python列表快50倍的數組對象。NumPy中的數組對象稱為ndarray,它提供了許多支持函數,使得利用ndarray非常容易。數組在數據科學中非常常用,因為速度和資源非常重要。
注釋:
1、ndarray(對象,多維數組)
2、數據科學:計算機科學的一個分支,研究如何存儲,使用和分析數據從中獲取信息。
3、為什么Numpy比列表快?
與列表不同,NumPy數組存儲在內存中的一個連續位置,因此進程可以非常有效的訪問和操縱它們,這種行為在計算機科學中稱為引用的局部性。這是NumPy比列表快的主要原因,它還經過了優化,可與最新的CPU體系結構一同使用。
4、Numpy用哪種語言編寫?
NumPy是一個python庫,部分用python編寫,但是大多數需要快速計算的部分都是用C或C++編寫的。
5、Numpy代碼庫在哪里?
NumPy的源代碼位于github資料庫中:NumPy
github:使得許多人可以在同一個代碼庫上工作。
二、NumPy入門
1、安裝Numpy
pip install numpy #如果此命令失敗,可以使用安裝了numpy的python發行版
2、導入Numpy
import numpy
示例:
import numpy
arr = numpy.array([1,2,3,4,5])
print(arr)
Result:
[1 2 3 4 5]
3、Numpy as np
numpy通常以np別名導入
import numpy as np
示例:
import numpy as np
arr = numpy.array([1,2,3,4,5])
print(arr)
4、檢查Numpy版本
import numpy as np
print(np.__version__)
Result:
1.21.5
三、NumPy創建
1、創建Numpy ndarray對象
numpy用于處理數組,numpy中的數組稱為ndarray,我們可以使用array()函數創建一個numpy ndarray對象。
import numpy as np
arr = np.array([1,2,3,4,5])
print(arr)
print(type(arr))
Result:
[1 2 3 4 5]
<class 'numpy.ndarray'>
備注:type():這個內置的python函數告訴我們傳遞給它的對象的類型,它表明arr是numpy.ndarray類型。要創建ndarray,我們可以將列表、元組或任何類似數組的對象傳遞給array()方法,然后它將被轉換為ndarray。
示例:使用元組創建numpy數組
import numpy as np
arr = np.array((1,2,3,4,5))
print(arr)
Result:
[1 2 3 4 5]
數組中的維
數組中的維是數組的維度(嵌套數組)的一個級別。
嵌套數組:指的是將數組作為元素的數組。
0-D數組
0-D數組,或標量(Scalars),是數組中的元素,數組中的每個值都是一個0-D數組。
示例:用60創建0-D數組
import numpy as np
arr = np.array(60)
print(arr)
Result:
60
1-D數組
其元素為0-D數組的數組,稱為一維或1-D數組。
示例:創建包含1,2,3,4,5,6的一維數組
import numpy as np
arr = np.array([1,2,3,4,5])
print(arr)
Result:
[1 2 3 4 5]
2-D數組
其元素為1-D數組的數組,稱為2-D數組,它們通常用于表示矩陣或二階張量,Numpy有一個專門用于矩陣運算的完整子模塊numpy.mat。
示例:創建包含值1、2、3;4、5、6兩個數組的2-D數組
import numpy as np
arr = np.array([[1,2,3],[4,5,6]])
print(arr)
Result:
[[1 2 3][4 5 6]]
3-D數組
示例:用兩個2-D數組創建一個3-D數組
import numpy as np
arr2 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(arr)
Result:
[[[ 1 2 3][ 4 5 6]][[ 7 8 9][10 11 12]]]
檢查維數?
NumPy數組提供了ndim屬性,該屬性返回一個整數,該整數提供了維數。
import numpy as np
arr = np.array(60)
arr0 = np.array([1,2,3,4,5,6])
arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(arr.ndim)
print(arr0.ndim)
print(arr1.ndim)
print(arr2.ndim)
Result:
0
1
2
3
更高維數組
數組可以擁有任意維數的維,可以用ndmin參數定義維數
示例:創建5個維度的數組,并驗證
import numpy as np
arr = np.array([1,2,3,4],ndmin=5)
print(arr)
print('number of dimension :',arr.ndim)
Result:
[[[[[1 2 3 4]]]]]
number of dimension : 5
注釋:在此數組中,最里面的維度(第 5 個 dim)有 4 個元素,第 4 個 dim 有 1 個元素作為向量,第 3 個 dim 具有 1 個元素是與向量的矩陣,第 2 個 dim 有 1 個元素是 3D 數組,而第 1 個 dim 有 1 個元素,該元素是 4D 數組。
四、NumPy數組索引
訪問數組元素
數組索引等同于訪問數組元素,我們可以通過引用其索引號來訪問數組元素,Numpy數組的索引以0開頭,這意味著第一個元素索引為0,第二個索引為1;
import numpy as np
arr = np.array([1,2,3,4,5])
print(arr[0]) #獲取第一個元素
print(arr[1]) #獲取第二個元素
print(arr[2]+arr[3]) #獲取第三個和第四個元素并相加
Result:
1
2
7
訪問2-D數組元素
要訪問二維數組中的元素,我們可以使用逗號分隔的整數表示元素的維數和索引。
import numpy as np
arr = np.array([[1,2,3,4,5],[6,7,8,9,10]])
print('2nd element on 1st dim:',arr[0,1]) #訪問第一維中的第二個元素
Result:
2
訪問3-D數組元素
import numpy as np
arr = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(arr[0,1,2]) #訪問第一個數組的第二個數組的第三個元素
Result:
6
負索引
使用負索引從尾開始訪問數組
import numpy as np
arr = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(arr[0,1,-2]) #訪問第一個數組的第二個數組的第三個元素
Result:
5
五、NumPy數組裁切
python中裁切的意思就是將元素從一個給定的索引帶到另一個給定的索引;
裁切數組
我們像這樣傳遞切片而不是索引:[start:end];
我們還可以定義步長:[start: end: step];
如果我們不傳遞start,則將其視為0;
如果我們不傳遞end,則視為該維度內數組長度;
如果我們不傳遞step,則視為1;
示例:從下面數組中裁切索引為1到索引為5的元素
import numpy as np
arr = np.array([1,2,3,4,5,6])
print(arr[1:5])
Result:
[2 3 4 5] #結果包含了開始索引,不包含結束索引
負裁切
import numpy as np
arr = np.array([1,2,3,4,5,6])
print(arr[-4:-1])
Result:
[3 4 5] #結果包含了開始索引,不包含結束索引
step
示例一:用step值確定裁切的步長
import numpy as np
arr = np.array([1,2,3,4,5,6,7,8,9])
print(arr[1:7:2])
Result:
[2 4 6] #結果包含了開始索引,不包含結束索引
示例二:返回數組中相隔的元素
import numpy as np
arr = np.array([1,2,3,4,5,6,7,8,9])
print(arr[::2])
Result:
[1 3 5 7 9]
裁切2-D數組
示例一:從第二個元素開始,對從索引1到索引4(不包括)進行切片
import numpy as np
arr = np.array([[1,2,3,4,5],[6,7,8,9,10]])
print(arr[1,1:4])
Result:
[7 8 9]
示例二:
import numpy as np
arr = np.array([[1,2,3,4,5],[6,7,8,9,10]])
print(arr[0:3,1:4])
Result:
[[2 3 4][7 8 9]]
六、NumPy數據類型
python中的數據類型
- strings -用于表示文本數據,文本用引號引起來,例如:“abcd”;
- integer -用于表示整數,例如:-1,-2,-3;
- float -用于表示實數,例如:1.2,4.6;
- boolean -用于表示True或False;
- complex -用于表示復平面的數字,例如:1.0+2.4j;
NumPy中的數據類型
Numpy有一些額外的數據類型,并通過一個字符引用數據類型,例如,i代表整數,u代表無符號整數等;
- i -整數
- b -布爾
- u -無符號整數
- f -浮點
- c -復合浮點數
- m -timedelta
- M -datetime
- O -對象
- S - 字符串
- U - unicode 字符串
- V -固定的其它類型的內存塊(void)
檢查數組的數據類型
numpy數組對象有一個名為dtype的屬性,該屬性返回數組的數據類型:
import numpy as np
arr = np.array([1,2,3,4,5])
arr1 = np.array(['windows','linux','mac','other'])
print(arr.dtype)
print(arr1.dtype)
Result:
int32
<U7
用已定義的數據類型創建數組
我們使用array()函數來創建數組,該函數可以使用可選參數:dtype,它允許我們自定義數組元素的預期數據類型:
import numpy as np
arr = np.array([1,2,3,4],dtype='S')
print(arr)
print(arr.dtype)
Result:
[b'1' b'2' b'3' b'4']
|S1
假如值無法轉換:
如果給出了不能強制轉換元素的類型,則Numpy將引發ValueError.
示例:無法將非整數字符串(比如’a’)轉換為整數
import numpy as np
arr = np.array(['a','1','2','3',dtype='i'])
Result:
File ".\rumen2.py", line 87arr = np.array(['a','1','2','3',dtype='i'])^
SyntaxError: invalid syntax
轉換已有數組的數據類型
更改現有數組的數據類型的最佳方法,是使用astype()方法復制該數組。astype()函數創建數組的副本,并允許我們將數據類型指定為參數。數據類型可以使用字符串指定,例如’f’表示浮點數,'i’表示整數等,或者我們也可以直接使用數據類型,例如float&int.
import numpy as np
arr = np.array([1.1,2.1,3.1])
newarr = arr.astype('i')
print(newarr)
print(newarr.dtype)
Result:
[1 2 3]
int32
七、NumPy副本/視圖
NumPy數組副本vs視圖
- 副本和數組視圖之間的主要區別在于副本是一個新數組,而這個視圖只是原始數據的視圖。
- 副本擁有數據,對副本所做的任何更改都不會影響原始數組,對原始數組所做的任何更改也不會影響副本。
- 視圖不擁有數據,對視圖所做的任何更改會影響原始數組,而對原始數組所做的任何更改都會影響視圖。
示例:進行復制,更改原始數組并顯示兩個數組
該副本不應受到對原始數組所做更改的影響
import numpy as nparr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 61print(arr)
print(x)
Result:
[61 2 3 4 5]
[1 2 3 4 5]
示例:創建試圖,更改原始數組,然后顯示兩個數組
試圖應該受到對原始數組所做更改的影響
import numpy as nparr = np.array([1, 2, 3, 4, 5])
x = arr.view()
arr[0] = 61print(arr)
print(x)
Result:
[61 2 3 4 5]
[61 2 3 4 5]
檢查數組是否擁有數據
如上所述,副本擁有數據,而視圖不擁有數據,我們如何檢查?
每個NumPy數組都有一個屬性base,如果該數組擁有數據,則這個base屬性返回None.否則base屬性將引用原始對象。
import numpy as nparr = np.array([1, 2, 3, 4, 5])x = arr.copy()
y = arr.view()print(x.base)
print(y.base)
Result:
None #副本返回None,視圖返回原始數組
[1 2 3 4 5]
八、NumPy數據形狀
數組的形狀:數組的形狀是每個維中元素的數量。
獲取數組的形狀
NumPy數組有一個名為shape的屬性,該屬性返回一個數組,每個索引具有相應元素的數量。
示例:打印2-D數組的形狀
import numpy as nparr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])print(arr.shape)
Result:
(2, 4) #2個維,每個維4個元素
示例:利用ndmin使用值1,2,3,4,的向量創建有5個維度的數組,并驗證最后一個維度的值為4
import numpy as nparr = np.array([1, 2, 3, 4], ndmin=5)print(arr)
print('shape of array :', arr.shape)
Result:
[[[[[1 2 3 4]]]]]
shape of array : (1, 1, 1, 1, 4)
元組的形狀代表什么?
每個索引處的整數表明相應維度擁有的元素數量,上例中的索引4,我們的值為4,因此可以說第5個(4+1th)維度有4個元素。
九、NumPy數組重塑
數組重塑:意味著更改數組的形狀。數組的形狀是每個維中元素的數量。通過重塑我們可以添加或刪除維度或更改每個維度中的元素數量。
從1-D重塑為2-D
示例:將以下具有12個元素的1-D數組轉換為2-D數組。最外層的維度將有4個數組,每個數組包含3個元素。
import numpy as nparr = np.array([1, 2, 3, 4], ndmin=5)print(arr)
print('shape of array :', arr.shape)
Result:
[[[[[1 2 3 4]]]]]
shape of array : (1, 1, 1, 1, 4)
十、NumPy數組迭代
數組迭代意味著逐一遍歷元素,當我們在numpy中處理多維數組時,可以使用python的基本for循環來完成此操作。
實例一:迭代一維數組元素
import numpy as np
arr = np.array([1,2,3])
for x in arr:print(x)
實例一:迭代二維數組元素
import numpy as np
arr = np.array([1,2,3])
for x in arr:print(x)
總結
分享:
吾所謂鐘情者,是靈魂深處一種愛慕不可得已之情。由愛而慕、慕而達則為美滿姻緣,慕而不達,則衷心藏焉,若遠若近,若存若亡,而仍不失其為真情。此所謂愛情。