Python Numpy陣列計算

2022-06-23 18:15:13 字數 4805 閱讀 9794

1、numpy是高效能科學計算和資料分析的基礎包。它是pandas等其他各種工具的基礎。

2、numpy的主要功能:

3、安裝方法:pip install numpy

1、建立ndarray:np.array()

2、ndarray是多維陣列結構,與列表的區別是:

3、常用屬性:

4、常用方法

array.shape                         array的規格

array.ndim

array.dtype array的資料規格

numpy.zeros(dim1,dim2) 建立dim1*dim2的零矩陣

numpy.arange

numpy.eye(n) /numpy.identity(n) 建立n*n單位矩陣

numpy.array([…data…], dtype=float64 )

array.astype(numpy.float64) 更換矩陣的資料形式

array.astype(float) 更換矩陣的資料形式

array * array 矩陣點乘

array[a:b] 切片

array.copy() 得到ndarray的副本,而不是檢視

array [a] [b]=array [ a, b ] 兩者等價

name=np.array(['bob','joe','will']) res=name==』bob』 res= array([ true, false, false], dtype=bool)

data[true,false,…..] 索引,只索取為true的部分,去掉false部分

通過布林型索引選取陣列中的資料,將總是建立資料的副本。

data[ [4,3,0,6] ] 索引,將第4,3,0,6行摘取出來,組成新陣列

data[-1]=data[data.__len__()-1]

numpy.reshape(a,b) 將a*b的一維陣列排列為a*b的形式

array([a,b,c,d],[d,e,f,g]) 返回一維陣列,分別為[a,d],[b,e],[c,f],[d,g]

array[ [a,b,c,d] ][:,[e,f,g,h] ]=array[ numpy.ix_( [a,b,c,d],[e,f,g,h] ) ]

array.t array的轉置

numpy.random.randn(a,b) 生成a*b的隨機數組

numpy.dot(matrix_1,matrix_2) 矩陣乘法

array.transpose( (1,0,2,etc.) ) 對於高維陣列,轉置需要乙個由軸編號組成的元組

建立ndarray:

array() 將列表轉換為陣列,可選擇顯式指定dtype

arange() range的numpy版,支援浮點數

linspace() 類似arange(),第三個引數為陣列長度

zeros() 根據指定形狀和dtype建立全0陣列

ones() 根據指定形狀和dtype建立全1陣列

empty() 根據指定形狀和dtype建立空陣列(隨機值)

eye() 根據指定邊長和dtype建立單位矩陣

1、陣列和標量之間的運算

a+1 a*3 1//a a**0.5

2、同樣大小陣列之間的運算

a+b a/b a**b

3、陣列的索引:

一維陣列:a[5]

多維陣列:

列表式寫法:a[2][3]

陣列的切片:

一維陣列:a[5:8] a[4:] a[2:10] = 1

多維陣列:a[1:2, 3:4] a[:,3:5] a[:,1]

4、強調:與列表不同,陣列切片時並不會自動複製,在切片陣列上的修改會影響原陣列。 【解決方法:copy()】

問題:給乙個陣列,選出陣列中所有大於5的數。

答案:a[a>5]

原理:a>5會對a中的每乙個元素進行判斷,返回乙個布林陣列

布林型索引:將同樣大小的布林陣列傳進索引,會返回乙個由所有true對應位置的元素的陣列

問題2:給乙個陣列,選出陣列中所有大於5的偶數。

問題3:給乙個陣列,選出陣列中所有大於5的數和偶數。

答案:a[(a>5) & (a%2==0)]

a[(a>5) | (a%2==0)]

import numpy as np

a = np.array([1,2,3,4,5,4,7,8,9,10])

a[a>5&(a%2==0)] #注意加括號,不叫括號錯誤,如下

輸出:array([ 1, 2, 3, 4, 5, 4, 7, 8, 9, 10])

a[(a>5)&(a%2==0)]

輸出:array([ 8, 10])

問題1:對於乙個陣列,選出其第1,3,4,6,7個元素,組成新的二維陣列。

答案:a[[1,3,4,6,7]]

問題2:對乙個二維陣列,選出其第一列和第三列,組成新的二維陣列。

答案:a[:,[1,3]]

通用函式:能同時對陣列中所有元素進行運算的函式

常見通用函式:

numpy.sqrt(array)                   平方根函式   

numpy.exp(array) e^array[i]的陣列

numpy.abs/fabs(array) 計算絕對值

numpy.square(array) 計算各元素的平方 等於array**2

numpy.log/log10/log2(array) 計算各元素的各種對數

numpy.sign(array) 計算各元素正負號

numpy.isnan(array) 計算各元素是否為nan

numpy.isinf(array) 計算各元素是否為nan

numpy.cos/cosh/sin/sinh/tan/tanh(array) 三角函式

numpy.modf(array) 將array中值得整數和小數分離,作兩個陣列返回

numpy.ceil(array) 向上取整,也就是取比這個數大的整數

numpy.floor(array) 向下取整,也就是取比這個數小的整數

numpy.rint(array) 四捨五入

numpy.trunc(array) 向0取整

numpy.cos(array) 正弦值

numpy.sin(array) 余弦值

numpy.tan(array) 正切值

numpy.add(array1,array2)            元素級加法

numpy.subtract(array1,array2) 元素級減法

numpy.multiply(array1,array2) 元素級乘法

numpy.divide(array1,array2) 元素級除法 array1./array2

numpy.power(array1,array2) 元素級指數 array1.^array2

numpy.maximum/minimum(array1,aray2) 元素級最大值

numpy.fmax/fmin(array1,array2) 元素級最大值,忽略nan

numpy.mod(array1,array2) 元素級求模

numpy.copysign(array1,array2) 將第二個陣列中值得符號複製給第乙個陣列中值

numpy.greater/greater_equal/less/less_equal/equal/not_equal (array1,array2)

元素級比較運算,產生布林陣列

numpy.logical_end/logical_or/logic_xor(array1,array2)元素級的真值邏輯運算

在資料分析中,nan常被表示為資料缺失值

據缺失值

既然nan連自己都不相等,那麼怎麼判斷是不是nan呢?

用a==a 只要返回false就能判斷

常用函式:

隨機數生成函式在np.random子包內

常用函式

Python Numpy陣列儲存

numpy提供了幾種資料儲存的方法。以3 4陣列a為例 這種方法只能儲存為二進位制檔案,且不能儲存當前資料的行列資訊,檔案字尾不一定非要是bin,也可以為txt,但不影響儲存格式,都是二進位制。這種儲存方法對資料讀取有要求,需要手動指定讀出來的資料的的dtype,如果指定的格式與儲存時的不一致,則讀...

Python numpy的矩陣計算

import numpy as np def numpywork1 矩陣的求和運算 one np.array 1,0,1,3,4,1 2,1,4,2,3,0 3,5,4,1,3,2 2,6,3,1,3,8 9,1,2,1,5,0 two np.sum one,axis 0 每一列求和,得到的新矩陣 ...

python numpy 陣列的切片

參考 對於一維陣列 來說,python原生的list和numpy的array的切片操作都是相同的。arr name start end step 是複製源的意思 對於二維陣列來說,對陣列操作規範是這樣的 arr name 行操作,列操作 舉個例子 in np.arrange 12 reshape 3...