內(nèi)容為:https://juejin.cn/book/7240731597035864121的學習筆記
導包
import numpy as np
numpy數(shù)組創(chuàng)建
- 創(chuàng)建全0數(shù)組,正態(tài)分布、隨機數(shù)組等就不說了,提供了相應的方法
- 通過已有數(shù)據(jù)創(chuàng)建有兩種 arr1=np.array([1,2,3,4,5]) 或者data=np.loadtxt(‘C:/Users/000001_all.csv’,dtype=‘float’,delimiter=‘,’,skiprows=1) (data=np.genfromtxt(‘C:/Users/000001_all.csv’,dtype=‘float32’,delimiter=‘,’,skip_header=1) )
- 注意淺拷貝與深拷貝
array
copy
是深,asarray
是淺
import numpy as np
arr1=np.array([1,2,3,4,5])
arr2=np.array(arr1)
arr3=np.asarray(arr1)
arr4=np.copy(arr1)
arr1[0]=100
print('更改后arr2為:',arr2)
print('更改后arr3為:',arr3)
print('更改后arr4為:',arr4)
更改后arr2為: [1 2 3 4 5]
更改后arr3為: [100 2 3 4 5]
更改后arr4為: [1 2 3 4 5]
- 數(shù)組的切片也是淺拷貝
Score=np.array([69,80,90,40,60,20,90,94,90,99])#學生的成績
Score[:3]=0
print('修改切片對象成績后的Score為',Score)
Score1=[69,80,90,40,60,20,90,94,90,99]
Score1_list=Score1[:3]
Score1_list=0
print('修改Score1_list后的Score1為',Score1)
修改切片對象成績后的Score為 [ 0 0 0 40 60 20 90 94 90 99]
修改Score1_list后的Score1為 [69, 80, 90, 40, 60, 20, 90, 94, 90, 99]
索引的訪問
訪問某個下標(一個元素)得到的也是一個數(shù)值;如果訪問的是多個下標,得到的是一個數(shù)組
一維
二維
Score2=np.array([[69,40,30],[80,90,40],[90,100,50],[40,20,99],[60,60,66],
[20,66,44],[90,88,56],[94,99,67],[90,20,70],[99,50,86]])
print('學號為1的同學的語文和英語成績?yōu)?,Score2[[0,0],[0,2]])
學號為 1 的同學的語文和英語成績?yōu)?[69 30]
三維
Space=np.array([
[[5,4,8],[5,9,2],[4,5,3]],
[[4,9,6],[2,2,5],[4,3,4]],
[[4,2,1],[7,6,3],[4,6,5]]
])
print(Space[[0,0,1],[0,1,2],[0,0,2]])
[5 5 4]
數(shù)組的運算
廣播
3種
廣播機制的原則是如果兩個數(shù)組的從后數(shù)第一個維度軸長度相符或其中一個數(shù)組的軸長為 1,則認為它們能夠廣播
- 一
Arr1=np.array([1,2,3])
print(Arr1)
print(Arr1*3)
[1 2 3]
[3 6 9]
- 二
Arr2=np.array([[1,2,3],[4,5,6]])
Arr1=np.array([1,2,3])
print(Arr1)
print(Arr2)
print(Arr1+Arr2)
[1 2 3]
**********
[[1 2 3]
[4 5 6]]
**********
[[2 4 6]
[5 7 9]]
- 三
Arr2=np.array([[1,2,3],[4,5,6]])
Arr=np.array([[1],[2]])
print(Arr2)
print(Arr)
print(Arr2+Arr)
[[1 2 3]
[4 5 6]]
**********
[[1]
[2]]
**********
[[2 3 4]
[6 7 8]]
數(shù)值與數(shù)組的標量運算,就用到了廣播機制,會把數(shù)據(jù)擴充到跟待運算一樣的大小,按位相加/減/乘/除
計算函數(shù)
除了可以arr1與arr2直接相運算,如arr1*arr2,也有相應的方法
方法:add() 加法函數(shù),subtract() 減法函數(shù),multiply() 乘法函數(shù),divide() 除法函數(shù),mod() 取余函數(shù)。
Score_F=np.array([69,80,90,40,60,20,90,94,90,99])#第一次成績
Score_S=np.array([70,92,63,20,50,96,33,44,55,30])#第二次成績
Score_chaju=np.subtract(Score_F,Score_S)
print('求兩次成績的和',np.add(Score_F,Score_S))
print('第一次成績的0.6加第二次成績的0.4',np.add(np.multiply(Score_F,0.6),np.multiply(Score_S,0.4)))
print('查看兩次成績的差距,差距以正數(shù)顯示',np.abs(Score_chaju))
統(tǒng)計函數(shù)
axis有兩個值,為0求的是縱向的聚合值,為1求的是橫向的聚合值,
常用的聚合函數(shù)如下:mean,sum,max,min,std,var
標準差是方差的算數(shù)平方根(標準差和原數(shù)據(jù)單位相同,方差多個平方),所以方差>標準差,說明偏差大;方差<標準差,說明偏差小
邏輯運算
提供了all、any 和 where 這三個方法
# 得到兩門成績都及格的同學的成績
import numpy as np
Score=np.array([[98,89],[64,90],[60,56],[92,78],[32,45],[48,30]])
Score60=Score>60
Score_bool=np.all(Score60,axis=1)
print(Score_bool)
print(Score[Score_bool])
[ True True False True False False]
[[98 89]
[64 90]
[92 78]]
#查看數(shù)學或者語文超過 90 分同學的成績
Score90=Score>90
Score_bool=np.any(Score90,axis=1)
print(Score_bool)
print(Score[Score_bool])
[ True False False True False False]
[[98 89]
[92 78]]
# 成績大于60的分數(shù)有哪些
import numpy as np
Score_math=np.array([98,64,60,92,32,48])
score60_index = np.where(Score_math>60)
score60 = Score_math[score60_index]
print(score60_index)
print(score60)
(array([0, 1, 3]),)
[98 64 92]
矩陣運算
可以用@或dot來實現(xiàn),它倆是等價的
注意是(3, 2)*(2, 4)=(3, 4) 只有
fruit_price=np.array([[5,4,3]]) # 1*3
jinshu=np.array([[2],[3],[1]]) # 3*1
print('水果的總價格為:\n',fruit_price@jinshu) #得到的是1*1的矩陣
print('水果的總價格為:\n',np.dot(fruit_price,jinshu))
水果的總價格為:
[[25]]
水果的總價格為:
[[25]]
數(shù)組的拆分與合并
合并
水平可以用concatenate 方法、hstack 方法和 column_stack 方法
垂直可以用concatenate 方法、vstack 方法和 row_stack 方法
- 水平
import numpy as np
Stock1=np.array([[14.322,14.552],[14.472,14.532],[14.592,15.022],[14.852,14.802]])
Stock2=np.array([[14.652,14.192],[14.832,14.422],[15.022,14.592],[15.152,14.722]])
# 方式1
Stock=np.concatenate((Stock1,Stock2),axis=1)
# 方式2
Stock=np.hstack((Stock1,Stock2))
# 方式3
Stock=np.column_stack((Stock1,Stock2))
print(Stock)#上面3種得到的結果一樣,寫一塊了
[[14.322 14.552 14.652 14.192]
[14.472 14.532 14.832 14.422]
[14.592 15.022 15.022 14.592]
[14.852 14.802 15.152 14.722]]
- 垂直
import numpy as np
Stock1=np.array([[14.322,14.552],[14.472,14.532],[14.592,15.022],[14.852,14.802]])
Stock2=np.array([[14.912,14.932],[14.772,14.602]])
Stock=np.concatenate((Stock1,Stock2),axis=0)
Stock=np.vstack((Stock1,Stock2))
Stock=np.row_stack((Stock1,Stock2))
print(Stock)
[[14.322 14.552]
[14.472 14.532]
[14.592 15.022]
[14.852 14.802]
[14.912 14.932]
[14.772 14.602]]
文章來源:http://www.zghlxwxcb.cn/news/detail-638161.html
分割
# 水平
import numpy as np
Stock=np.array([[14.322,14.552],[14.472,14.532],[14.592,15.022],[14.852,14.802],[14.912,14.932],[14.772,14.602]])
open,close=np.split(Stock,2,axis=1)
print('open為{},close為{}'.format(open,close))
open為[[14.322]
[14.472]
[14.592]
[14.852]
[14.912]
[14.772]],close為[[14.552]
[14.532]
[15.022]
[14.802]
[14.932]
[14.602]]
# 垂直
# 這里面對行下標做切分,包含頭不包含尾如按[1,3,4]: 0, 1,2, 3, 4,5
import numpy as np
Stock=np.array([[14.322,14.552],[14.472,14.532],[14.592,15.022],[14.852,14.802],[14.912,14.932],[14.772,14.602]])
arr1,arr2,arr3,arr4=np.split(Stock,[1,3,4],axis=0)
print('arr1為{},arr2為{},arr3為{},arr4為{}'.format(arr1,arr2,arr3,arr4))
arr1為[[14.322 14.552]],arr2為[[14.472 14.532]
[14.592 15.022]],arr3為[[14.852 14.802]],arr4為[[14.912 14.932]
[14.772 14.602]]
綜合案例:
https://juejin.cn/book/7240731597035864121/section/7255506664244117559文章來源地址http://www.zghlxwxcb.cn/news/detail-638161.html
到了這里,關于數(shù)據(jù)分析-python學習 (1)numpy相關的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!