六. numpy數據矩陣


numpy 數據(矩陣模塊)

 

種開源的數值計算擴展庫.這種庫可用來存儲和處理大型矩陣,比python自身的嵌套列表結構要高效的多(該結構也可以用來表示矩
https://www.runoob.com/numpy/numpy-tutorial.html
比較一下 nu.array 和 list 的區別
np.array是多維的,list是一維的
list對一維數組做一些操作,numpy其實就是對多維做操作
.計算速度快,甚至優於python內置的簡單運算,使其成為pandas、sklearn等模塊的依賴包。高級的框架如TensorFlow、PyTorch等,其數組操作也和numpy非常相似
矩陣即numpy的np.array對象,創建矩陣就是把==列表==傳入np.array()
import numpy as nu # 數據矩陣
# 一維矩陣
arr1 = nu.array([1, 2, 3])
print(arr1)
# [1 2 3]
# 只有一行
# 相當於一條直線
print("************************二維對象**********************************")
#二維對象
arr2 = nu.array([[1, 2, 3], [4,5,6]])
print(arr2)

# 有行有列
# 相當於一個面,里面有多條線,一個列表里裝了多個一維
# 二維數組(用的最多的)
print("************************創建三維的ndarray對象**********************************")
#創建三維的ndarray對象
arr3 = nu.array([[[1, 2, 3],
                  [3,2,1]],
                  [[4,5,6],
                  [6,5,4]]])
print(arr3)
print("***********************shape(查看ndarray對象的形式)***********************************")
# shape(查看ndarray對象的形式)
arr4=nu.array( [[1, 2, 3, 4],
               [5, 6, 7, 8],
               [5, 6, 7, 8]])
print(arr4)
# [[1 2 3 4]
#  [5 6 7 8]
#  [5 6 7 8]]
cc=arr4.shape    #獲得多維數組的行和列,以元組形式表現出來
print(cc)       # (3, 4)   # (矩陣的行數,矩陣的列數)

print(arr4.shape[0])    # 獲取行  3
print(arr4.shape[1])   # 獲取列   4
print("**************************切分工具********************************")
# 2.切分工具
arr5=nu.array([ [1, 2, 3, 4],
                [5, 44, 88, 8],
                [5, 6, 7, 8]])
print(arr5[2,3])  #  行和列索引都從0開始,取第2行第3列               # 8

print(arr5[0,:])  #第一行,第1,2,3,4列的數
# [1 2 3 4]

print(arr5[:,0]) #所有行,第1列的數
# [1 5 5]

print(arr5[0:])   # 沒有逗號的時候取出了全部
# [[1 2 3 4]
#  [5 6 7 8]
#  [5 6 7 8]]

print(arr5[1,1:3]) #取第二行第第二個和第三個
# [44 88]

print(arr5[arr5>3])#取大於3的值
# [ 4  5 44 88  8  5  6  7  8]

#取第第一列大於3的值
arr_lien = arr5[:,0]
print(arr_lien[arr_lien>3])   # [5 5]


# 有一個多維數組存儲的是人的年齡,表格里有200歲以上的年齡
arr6 = nu.array([ [1000,2,300,4],[5,600,7,8],[5,6,700,8]])
# arr>200
"""array([[ True, False,  True, False],
       [False,  True, False, False],
       [False, False,  True, False]])"""

print(arr6[arr6>200])      # [1000  300  600  700]
print("**************************多維數組的元素的替換********************************")
# 多維數組的元素的替換

arr7=nu.array([ [1, 2, 3, 4],
                [5, 44, 88, 8],
                [5, 6, 7, 8]])

cc=arr7[1,2]=666
print(arr7)

#數組中大於30的數替換成了99
bb=arr7[arr7>30]=99
print(bb)
print(arr7)

# 所有行,第1列的數  修改成11
dd=arr7[:,0]=11
print(dd)
print(arr7)
print("**************************多維數組的合並********************************")
# 多維數組的合並
arre = nu.array([[1, 2, 3],[4,5,6]])
arrr = nu.array([[3, 2, 4],[5,3,7]])
#vertical 垂直新的

l=nu.vstack((arre,arrr))
print(l)

#horizon 水平的
k=nu.hstack((arre,arrr))
print(k)

# concatenate 連接的意思,默認垂直合並
b=nu.concatenate((arre,arrr))
print(b)


# print(nu.concatenate((arre,arrr),axis=0或1)    #前面只能寫入一個容器,后面用axis控制豎着合並還是橫着合並
print(nu.concatenate((arrr,arre),axis=1))

# 3.生成布爾矩陣
arr = nu.array([[1, 2, 3],
               [4,5,6]])
print(arr>5)
'''
[[False False False]
 [False False  True]]
'''
print("********************通過函數方法創建多維數組**************************************")
a1=[i for i in range(10)]
print(a1)
# np.arage(起始值,結束值,步長)#顧頭不顧尾,用法類似for 循環中的range
a2=[i for i in nu.arange(10)]
print(a2)

a3=[i for i in nu.arange(1,10,2)]
print(a3)

# .zeros/ones/eye
# 構造3*4的全0矩陣
print(nu.zeros((3, 4))) #填的值為(行數,列數)
"""[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]"""

# 構造3*4的全1矩陣
print(nu.ones((3, 4)))  #填的值為(行數,列數)
"""[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]"""

# 構造3個主元的單位矩陣
print(nu.eye(3))     #填的值為(主元的個數)
'''
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]
'''

# 2.linspace/logspace
# 構造一個等差數列,取頭也取尾,從0取到20,取5個數
print(nu.linspace(0, 20, 5))
#[  0.   5.  10.  15.  20.]

# 構造一個等比數列,從10**0取到10**20,取5個數
print(nu.logspace(0, 20, 5))
# [1.e+00 1.e+05 1.e+10 1.e+15 1.e+20]

# 意思就是 生成兩行兩列 為十個零的數
print(nu.zeros((2,2,2)))
print("********************矩陣的運算**************************************")
# 兩個矩陣對應元素相加
# 兩個矩陣對應元素相減
# 兩個矩陣對應元素相乘
# / 兩個矩陣對應元素相除,如果都是整數則取商
# % 兩個矩陣對應元素相除后取余數
# n 單個矩陣每個元素都取n次方,如2:每個元素都取平方

ar = nu.array([[1, 2, 3],[4,5,6]])
er= nu.array([[3, 2, 4],[5,3,7]])
print(ar+er)
"""[[ 4  4  7]
 [ 9  8 13]]"""

print(ar*2)
"""[[ 2  4  6]
 [ 8 10 12]]"""

# 點乘和轉置(了解) 點乘必須 m*n n *m
print(nu.dot(ar,er.T))
"""[[19 32]
 [46 77]]"""

# 求逆(了解)
print(nu.linalg.inv(nu.dot(ar,er.T)))

"""[[-8.55555556  3.55555556]
 [ 5.11111111 -2.11111111]]"""


# 獲取矩陣所有元素中的最大值
# print(ar.max())

# 獲取舉着每一列的最大值
# print(ar.max(axis=0))

# 獲取矩陣每一行的最大值
# print(ar.max(axis=1))

# 獲取矩陣最大元素的索引位置
# print(ar.argmax(axis=1)

# 獲取矩陣所有元素的平均值
# print(ar.mean())

# 獲取矩陣每一列的平均值
# print(ar.mean(axis=0))

# 獲取矩陣每一行的平均值
# print(ar.mean(axis=1))

# 獲取矩陣所有元素的方差
# print(ar.var())

# 獲取矩陣每一列的元素的方差
# print(ar.var(axis=0))

# 獲取矩陣每一行的元素的方差
# print(ar.var(axis=1))
print("********************numpy生成隨機數**************************************")
# https://www.cnblogs.com/pythonywy/p/11010790.html
# https://www.cnblogs.com/geyatou322/p/11012088.html
# https://www.runoob.com/numpy/numpy-tutorial.html
# RandomState()方法會讓數據值隨機一次,之后都是相同的數據
rs = nu.random.RandomState(1)
print(rs.rand(10))


# 構造3*4的均勻分布的矩陣
# seed()方法會讓數據值隨機一次,之后都是相同的數據
np.random.seed(1)
print(nu.random.rand(3, 4))

# 構造3*4*5的均勻分布的矩陣
print(nu.random.rand(3, 4, 5))

# 構造3*4的正態分布的矩陣
print(nu.random.randn(3, 4))

# 構造取值為1-5內的10個元素的ndarray數組
print(nu.random.randint(1, 5, 10))

# 構造取值為0-1內的3*4的矩陣
print(nu.random.random_sample((3, 4)))

# 隨機選取arr中的兩個元素
print(nu.random.choice(arr, size=2))
# https://www.runoob.com/w3cnote/python-pip-install-usage.html

 





 


免責聲明!

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



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