Python基礎之數組和向量化計算總結


一、多維數組

1、生成ndarray     (array函數)   

.np.array()生成多維數組

例如:import numpy as np
data1=[6,7.5,8,0,1]     #創建簡單的列表
print(data1)
arr1=np.array(data1)    #將列表創建數組
print(arr1)

2、ndarry的數據類型

1)dtype()   #獲取數組元素類型(浮點數、復數、整數等)

data=np.random.randn(2,3)   #生成隨機數組
print(data)
print(data.shape)    #返回數組的形狀
print(data.dtype)   

2)轉化數組的數據類型astype()   astype生成一個新的數組

import numpy as np

a=np.array([0.11,2.2,3])

print(a)

b=a.astype(np.int)

print(b)          補充:python中type 獲取數據類型

3、numpy數組算術

1)逐元素操作

arr=np.array([[1.,2.,3.],[4.,5.,6.]])

print(arr)

print(arr*arr)

4、索引與切片

1)基礎索引與切片

arr=np.arange(10)
print(arr)
print(arr[5:8])
arr[5:8]=12
print(arr)

2)布爾索引

names=np.array(["Bob","Joe","Will","Bob","Will","Joe","Joe",])

print(names=="Bob")   #結果:[ True False False  True False False False]

5、數組轉置與換軸

1)arr.T    #數組轉置

補充簡單的一維和二維數組的轉置就是線性代數中的行列相互交換。而對於高維數組的轉置:

import numpy as np

a = np.arange(12).reshape(2, 2, 3)  

#創建一個三維矩陣,由2個2*3的矩陣塊組成

print(a)    #結果為:

[[[ 0  1  2]      #運行結果:其中每個元素都有其唯一的坐標(x,y,z)例如:0的標為(0,0,0),1的坐標為:(0,1,0)........11的坐標為(1,1,2)

   [ 3  4  5]]

   [[ 6  7  8]

   [ 9 10 11]]]

Print(a.T)   #Output為:數組變為了3個2*2的矩陣了。而各元素的坐標變為:0:(0,0,0),1:(1,0,0),........11:(2,1,1)每個元素坐標的,其實T操作等同於后面兩種方法a.transpose(2,1,0)x軸和z軸的交換以及a.swapaxes(0,2)

[[[ 0  6]

  [ 3  9]]

 [[ 1  7]

  [ 4 10]]

 [[ 2  8]

  [ 5 11]]]

 2)內積:np.dot()     x.dot()等價於np.dot(x,y)

arr=np.random.randn(6,3)
print(arr)
print(arr.T)
print(np.dot(arr.T,arr))

(3)換軸:transpose()

對於高維數組,transpose()方法的參數需要得到一個由軸編號(軸編號自0開始)序列構成的元組才能對軸進行轉置只需要調換軸對應數字參數的順序就可以將數組進行軸的變換。

arr=np.arrange(16).reshape((2,2,6))

arr.transpose((1,0,2))          #將第二個軸和第一個軸變換位置

運行結果為:[[[ 0  1  2  3]

[ 8  9 10 11]]

[[ 4  5  6  7]

              [12 13 14 15]]]

Swapaxes方法,直接進行軸的交換

二、函數

1、一元通用函數

1)平方根  sqrt()

arr=np.arange(10)
print(arr)
print(np.sqrt(arr))

2)自然指數值  exp()

print(np.exp(arr))    

3)返回數組的小數部分和整數部分  modf()

arr=np.random.randn(7)*5
print(arr)
remainder,whole_part=np.modf(arr)
print(remainder)
print(whole_part)

2、二元通用函數

1)最大值  maximum()

x=np.random.randn(8)
print(x)
y=np.random.randn(8)
print(y)
print(np.maximum(x,y))

3、矩陣分解的標准函數集                  ???

1)、numpy.linalg()

1.1)、方陣的逆矩陣  inv()

1.2)、QR分解  qr()

from numpy.linalg import inv,qr
x=np.random.randn(5,5)
print(x)
mat=x.T.dot(x) #內積
print(inv(mat))  #求逆
q,r=qr(mat)
print(r)

4、隨機數生成器

numpy.random()

注意:產生隨機數random.randn()random.rand(n)的區別random.randn(n)是從標准正態分布中返回一個或者多個樣本值,random.rand(n,m)表示由位於(0,1)中的隨機數填充的n*m的矩陣。

三、數組編程

1、將條件邏輯作為數組操作  where()

xarr=np.array([1.1,1.2,1.3,1.4,1.5])
yarr=np.array([2.1,2.2,2.3,2.4,2.5])
cond=np.array([True,False,True,True,False])      #是否是x的值
result=np.where(cond,xarr,yarr)
print(result)               #result([1.1,2.2,1.3,1.4,2.5])

2、數學和統計方法  mean()平均值sum()求和cumsum()#0元素來累計和cumprod()  # 1元素來累計積         ???

arr=np.random.randn(5,4)
print(arr)
print(arr.mean())      #取總均值
print(np.mean(arr))
print(arr.mean(axis=1))    #按列數取均值
print(arr.mean(1))

3、布爾值數組的方法   any()   all()    ???

print(arr.sum(0))         #0元素來是加總
arr=np.array([[0,1,2],[3,4,5],[6,7,8]])
print(arr)
print(arr.cumsum(axis=0))    #axis=0行數加總   
print(arr.cumprod(axis=1))     #axis=1列數加總
bools=np.array([False,False,True,False])
print(bools.any())   #至少有一個
print(bools.all())     #全部都是

4、計算唯一值並排序:unique()

ints=np.array([3,3,3,2,2,1,1,4,4])
print(np.unique(ints))   #唯一值    結果:[1 2 3 4]


免責聲明!

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



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