日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

我的Python分析成长之路8

發(fā)布時(shí)間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我的Python分析成长之路8 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Numpy數(shù)值計(jì)算基礎(chǔ)

  Numpy:是Numerical Python的簡稱,它是目前Python數(shù)值計(jì)算中最為基礎(chǔ)的工具包,Numpy是用于數(shù)值科學(xué)計(jì)算的基礎(chǔ)模塊,不但能夠完成科學(xué)計(jì)算的任而且能夠用作高效的多維數(shù)據(jù)容器,可用于存儲(chǔ)和處理大型矩陣。Numpy的數(shù)據(jù)容器能夠保存任意類型的數(shù)據(jù),這使得Numpy可以無縫并快速地整合各種數(shù)據(jù)。Numpy本身并沒有提供很多高效的數(shù)據(jù)分析功能。理解Numpy數(shù)組即數(shù)組計(jì)算有利于更加高效地使用其他如pandas等數(shù)據(jù)分析工具。

  Numpy提供了兩種基本的對(duì)象:ndarray(多維數(shù)組對(duì)象)和ufunc(通用函數(shù))

1.數(shù)組屬性:

      ndim:返回int 。數(shù)組的維度

      shape:返回tuple。表示數(shù)組的尺寸,對(duì)于n行m列的矩陣,形狀為(m,n)

      size:返回int。表示數(shù)組的元素整數(shù),等于數(shù)組形狀的乘積

      dtype:返回data-typle。描述數(shù)組中元素的類型

      itemsize:返回int。表示數(shù)組中每個(gè)元素的大小(以字節(jié)為單位)

        

1 import numpy as np
2 arr1 = np.arange(9).reshape(3,3)
3 print("創(chuàng)建數(shù)組:",arr1)
4 print("數(shù)組的維度:",arr1.ndim)
5 print("數(shù)組的尺寸(形狀):",arr1.shape)
6 print("數(shù)組的數(shù)據(jù)類型:",arr1.dtype)
7 print("數(shù)據(jù)元素個(gè)數(shù):",arr1.size)
8 print("數(shù)據(jù)每個(gè)元素大小:",arr1.itemsize)

2.數(shù)組創(chuàng)建

    一、生成多維數(shù)組最簡單的方式就是使用array函數(shù),array函數(shù)接受任意的序列型對(duì)象(當(dāng)然也包括其他的數(shù)組)。

    基本語法法:numpy.array(object,dtype=None,copy=True,order='K',subok=False,ndmin=0)

          1.object 接受array。表示想要?jiǎng)?chuàng)建的數(shù)組.無默認(rèn)

          2.dtype 接受data-type.表示數(shù)組所需的數(shù)據(jù)類型。默認(rèn)為None

          3.ndmin 接受int。指定數(shù)組的最小維度。默認(rèn)為None

import numpy as np
data1 = [1,2,3,4,5]
data2 = [[1,2,3,4],[5,6,7,8]]
print("生成一維數(shù)組:",np.array(data1))   #生成一維數(shù)組
print("生成二維數(shù)組:",np.array(data2))   #生成二維數(shù)組

    二、使用其他函數(shù)創(chuàng)建數(shù)組

      

1 import numpy as np
2 print("使用arange函數(shù)生成數(shù)組:",np.arange(0,10,1))  #左閉右開
3 print("使用linspace函數(shù)生成數(shù)組:",np.linspace(0,9,10))  #閉區(qū)間
4 print("使用logspace函數(shù)生成數(shù)組:",np.logspace(0,2,10)) #[1,100]生成10個(gè)數(shù)
5 print("使用zeros函數(shù)生成數(shù)組:",np.zeros((2,3)))  #生成二行三列全為0的數(shù)組
6 print("使用ones函數(shù)生成數(shù)組:",np.ones((2,3))) #生成二行三列全為一的數(shù)組
7 print("使用eye函數(shù)生成數(shù)組:",np.ones(3))  #生成對(duì)角線上為一的數(shù)組
8 print("使用diag函數(shù)生成數(shù)組:",np.diag([1,2,3,4]))

3.數(shù)組的數(shù)據(jù)類型

    在Numpy中,所欲數(shù)組的數(shù)據(jù)類型是同質(zhì)的,即數(shù)組中的所有元素必須是一致的。這樣做的好處,更容易確定數(shù)組所需要的存儲(chǔ)空間。

    bool :用一位存儲(chǔ)的布爾類型(True or False)

    inti:由所在平臺(tái)決定其精度的整數(shù)

    int8:整數(shù) 范圍為:-128~127

    int16:整數(shù) 范圍為:-32768~32767

    int32:整數(shù) 范圍為:-2^31~2^32-1

    int64:整數(shù) 范圍為:-2^63~2^63-1

    unit8:無符號(hào)整數(shù) 范圍為:0~255

    unit16:無符號(hào)整數(shù) 范圍為:0~65535

    unit32:無符號(hào)整數(shù) 范圍為0~2^32-1

    unit64 無符號(hào)整數(shù) 范圍為0~2^64-1

    float16:半精度浮點(diǎn)數(shù)

    float32:單精度浮點(diǎn)數(shù)

    float64: 雙精度浮點(diǎn)數(shù)

    complex64 復(fù)數(shù) 分別用32為浮點(diǎn)數(shù)代表實(shí)部和虛部

    complex128/comple 復(fù)數(shù)分別用64位浮點(diǎn)數(shù)表示實(shí)部和虛部

    np.dtype() 查看數(shù)據(jù)類型

print(np.float(32))   #整形轉(zhuǎn)化為浮點(diǎn)型
print(np.int(42.0))  #浮點(diǎn)型轉(zhuǎn)化為整形
print(np.bool(42))  #整形轉(zhuǎn)化為bool型
print(np.float(True))  #bool型轉(zhuǎn)化為浮點(diǎn)型

4.生成隨機(jī)數(shù)

    Numpy提供了強(qiáng)大的生成隨機(jī)數(shù)的功能,但使用的都是偽隨機(jī)數(shù).random 是最常見的生成隨機(jī)數(shù)的方法.

1 print("生成隨機(jī)數(shù):",np.random.random())
2 print("生成均勻分布的隨機(jī)數(shù)",np.random.rand(10,5))
3 print("生成正態(tài)分布的隨機(jī)數(shù)",np.random.randn(10,5))
4 print("生成給定上下限的隨機(jī)數(shù):",np.random.randint(0,10,size=[5,2]))
5 print("生成二項(xiàng)分布隨機(jī)數(shù):",np.random.binomial(10,0,(2,3)))
6 print("生成beta分布隨機(jī)數(shù):",np.random.beta(0.2,0.3,(2,3)))
7 print("生成卡方分布隨機(jī)數(shù):",np.random.chisquare(10,[5,2]))
8 print("生成gamma分布隨機(jī)數(shù):",np.random.gamma(10,1,(5,2)))
9 print("生成任意期間均勻分布隨機(jī)數(shù):",np.random.uniform(0,10,(5,2)))

5.通過索引訪問數(shù)組

    1.一維數(shù)組的索引

    一維數(shù)組的索引比較簡單,與Python中l(wèi)ist的索引方法類似:如果你傳遞一個(gè)數(shù)值給數(shù)組的切片,數(shù)值會(huì)被傳遞給整個(gè)切片。區(qū)別于Python的內(nèi)建列表,數(shù)組的切片是原數(shù)組的視圖。這意味著數(shù)據(jù)并不是被復(fù)制,任何對(duì)于視圖的修改都會(huì)反映到原數(shù)組上。

    

1 arr1 = np.arange(10)
2 print(arr1[1])  #獲得索引為1的值
3 print(arr1[1:3])  #獲得索引為1,2的值
4 arr1[2:4] = 12
5 print(arr1)   #[ 0  1 12 12  4  5  6  7  8  9] 獲得
6 x = arr1[1:3].copy()   #如果不想要獲得是一份視圖的話,就用顯示的復(fù)制這個(gè)數(shù)組 .copy()
7 print(arr1)

    2.多維數(shù)組的索引

     多維數(shù)組的每一個(gè)維度都有一個(gè)索引,各個(gè)維度的索引之間用逗號(hào)隔開,或分兩個(gè)括號(hào)

1 arr= np.arange(9).reshape(3,3)
2 print(arr[0][2])    #2
3 print(arr[0,2])     #2 這兩種方式訪問等價(jià)
4 print(arr[1:,1:]) #第二、三行,第二、三列
5 print(arr[:2,2])  #前兩行,第三列
6 arr2 = np.array([[[1,2,3],[4,5,6]],[7,8,9],[10,11,12]])
7 print(arr2[0])   #[[1, 2, 3], [4, 5, 6]]
8 print(arr2[0][0]) #[1, 2, 3]

    3.布爾索引?

1 names = np.array(["A","B","C","D","E","F"])
2 data = np.random.randn(6,4)
3 print(names=="B")   #[False  True False False False False]
4 print(data[names=='B'])   #在索引數(shù)組中引入布爾數(shù)組  選擇names=="B"的行
5 print(data[names=='B',2:])     #names ="B" 的后兩列

6.改變數(shù)組的形態(tài)

  在對(duì)數(shù)組進(jìn)行操作時(shí),經(jīng)常需要改變數(shù)組的維度。在Numpy中,常用reshape函數(shù)改變數(shù)組的“形狀”,也就是改變數(shù)組的維度。參數(shù)為一個(gè)正整數(shù)元組,分別指定數(shù)組在每個(gè)維度上的大小,reshape函數(shù)在改變?cè)紨?shù)據(jù)形狀的同時(shí)不改變?cè)紨?shù)據(jù)。如果指定的數(shù)據(jù)和數(shù)組的元素不吻合,則函數(shù)將拋出異常。

  使用ravel()、flatten()完成展開工作,使用hstack()、vstack() 、concatenate完成組合操作,使用hsplit、vsplit、dsplit、split完成分割操作,可以將數(shù)組分割成相同大小的子數(shù)組,也可以指定原數(shù)組中需要分割的位置。

  

 1 arr = np.arange(12)
 2 print("創(chuàng)建一維數(shù)組:",arr)
 3 print("新的數(shù)組:",arr.reshape(3,4))   #返回(3,4)的數(shù)組
 4 print("數(shù)組的維度:",arr.ndim)   #查看數(shù)組的維度 2
 5 arr2 = np.arange(12).reshape(3,4)
 6 print("創(chuàng)建的二維數(shù)組:",arr2)
 7 print("使用ravel展平:",arr2.ravel())  #獲得一維數(shù)組[ 0  1  2  3  4  5  6  7  8  9 10 11]
 8 print("使用flatten橫向展開:",arr2.flatten())   #橫向展開 [ 0  1  2  3  4  5  6  7  8  9 10 11]
 9 print("使用flatten縱向展開:",arr2.flatten("F"))  #縱向展開,[ 0  4  8  1  5  9  2  6 10  3  7 11]
10 arr3 = arr2 *3
11 print("使用hstack完成橫向組合:",np.hstack((arr2,arr3)))  #橫向組合
12 print("使用vstack完成縱向組合:",np.vstack((arr2,arr3)))  #縱向組合
13 print("使用concatenate完成縱向組合操作",np.concatenate((arr2,arr3),axis=0))   #沿著縱向組合
14 print("使用concatenate完成橫向組合操作",np.concatenate((arr2,arr3),axis=1))  #沿著橫向組合
15 print("橫向分割:",np.hsplit(arr2,2))   #使用hsplit完成橫向分割
16 arr4 = np.arange(16).reshape(4,4)
17 print("縱向分割:",np.vsplit(arr4,2))  #使用vstack完成縱向分割  必須保證分割后相同大小
18 print("橫向分割:",np.split(arr4,axis=1))  #完成橫向分割
19 print("縱向分割:",np.split(arr4,axis=0))  #完成縱向分割

7.創(chuàng)建numpy矩陣

    在Numpy中,矩陣是ndarray的子類,在Numpy中,數(shù)組和矩陣有著重要的區(qū)別.Numpy中提供了兩個(gè)基本的對(duì)象:一個(gè)N維數(shù)組對(duì)象和一個(gè)通用函數(shù)對(duì)象。其他對(duì)象在它們之上構(gòu)建的。矩陣是繼承自Numpy數(shù)組對(duì)象的二維數(shù)組對(duì)象。矩陣也是二維的

    使用mat、matrix、bmat函數(shù)構(gòu)建矩陣和矩陣的操作

 mat1 = np.mat("1 2 3;2 3 4;3 4 5")
print("使用mat創(chuàng)建的矩陣:",mat1)
mat2 = np.matrix([[1,2,3],[2,3,4],[3,4,5]])
print("使用matrix創(chuàng)建的矩陣:",mat2)
mat3 = np.bmat("mat1;mat2")
print("使用bmat創(chuàng)建的矩陣:",mat3)
mat4 = mat1*3
print("矩陣與數(shù)相乘:",mat4)
mat5 = mat1+mat2
print("矩陣相加結(jié)果:",mat5)
mat6 = mat2 - mat1
print("矩陣相減結(jié)果:",mat6)
mat7 = mat1 * mat2 #等價(jià)于mat1@mat2
print("矩陣與矩陣相乘:",mat7) #相當(dāng)于求內(nèi)積
mat8 = np.multiply(mat1,mat2)
print("矩陣對(duì)應(yīng)元素相乘:",mat8)
print("矩陣的轉(zhuǎn)置:",mat1.T) #相當(dāng)于mat1.T
print("矩陣的共軛轉(zhuǎn)置:",mat1.H)
print("矩陣的逆矩陣:",mat1.I)
print("矩陣的一個(gè)視圖:",mat1.A)

8.ufunc函數(shù)

    ufunc函數(shù)全稱為通用函數(shù),是一種能夠?qū)?shù)組中的所有元素(逐元素)進(jìn)行操作的函數(shù)。ufunc是針對(duì)數(shù)組進(jìn)行操作的,并且都以Numpy數(shù)組作為輸出,因?yàn)椴恍枰獙?duì)數(shù)組中的每個(gè)元素進(jìn)行操作。

    一元通用函數(shù):

          add、fabs 逐元素計(jì)算整數(shù)、浮點(diǎn)數(shù)或復(fù)數(shù)的絕對(duì)值

          sqrt:計(jì)算每個(gè)元素的平方根

          square:計(jì)算每個(gè)元素的平方

          exp:計(jì)算每個(gè)元素的自然指數(shù)值

          log :計(jì)算對(duì)數(shù)

          ceil:計(jì)算每個(gè)元素的最高整數(shù)值? (大于等于這個(gè)數(shù)的最小整數(shù))

          floor :計(jì)算每個(gè)元素的最小整數(shù)值(小于等于這個(gè)數(shù)的最大整數(shù))

          sign:計(jì)算每個(gè)值的符號(hào)值:1(正數(shù)) 0(0)-1(負(fù)數(shù))

     二元通用函數(shù):

          add(+):將對(duì)應(yīng)元素相加???

          subtract(-):在第二個(gè)數(shù)組中,將第一個(gè)數(shù)組中包含的元素去掉      

          multiply(*) :將屬組中對(duì)應(yīng)的元素相乘 ? ? *

          divide(/),floor_diveide 除或整除

          power(**):將第二個(gè)數(shù)組的元素作為第一個(gè)數(shù)組對(duì)應(yīng)元素的冪次方

          maximum,fmax 逐個(gè)元素計(jì)算最大值,fmax忽略NAN

          minimun,fmax:逐個(gè)元素計(jì)算最小值,fmin忽略NAN

          mod:按元素的求模計(jì)算(求除法的余數(shù))

1 x = np.array([1,2,3])
2 y = np.array([4,5,6])
3 print("數(shù)組相加的結(jié)果:",np.add(x,y))   #相當(dāng)于+   [5 7 9]
4 print("數(shù)組相減的結(jié)果:",np.subtract(x,y))  #相當(dāng)于- [-3,-3,-3]
5 print("數(shù)組相乘的結(jié)果:",np.multiply(x,y))  #相當(dāng)于* [ 4 10 18]
6 print("數(shù)組相除的結(jié)果:",np.divide(x,y)) #相當(dāng)于/ [0.25 0.4  0.5 ]
7 print("數(shù)組冪運(yùn)算結(jié)果:",np.power(x,y))  #相當(dāng)于** [  1  32 729]
8 print("數(shù)組求最大值:",np.maximum(x,y))   #求x,y中數(shù)組元素的最大值
9 print("數(shù)組求模:",np.mod(x,y))  #相當(dāng)于%

9.ufunc函數(shù)的廣播機(jī)制

    廣播是指不同形狀的數(shù)組之間執(zhí)行算術(shù)運(yùn)算的方式、當(dāng)使用ufunc函數(shù)進(jìn)行數(shù)組計(jì)算時(shí),ufunc會(huì)對(duì)兩個(gè)元素對(duì)應(yīng)元素進(jìn)行計(jì)算。進(jìn)行這種操作的前提是兩個(gè)數(shù)組的shape一樣。當(dāng)兩個(gè)數(shù)組shape不一樣時(shí),Numpy就會(huì)執(zhí)行廣播機(jī)制。需要遵循四個(gè)原則:(1)讓所有的輸入數(shù)組向其中shape最大的數(shù)組看齊,shape中不足的地方通過在前面補(bǔ)1.

(2)輸出數(shù)組的shape是輸入數(shù)組shape的各個(gè)軸上的最大值.(3)如果輸入數(shù)組的某個(gè)軸和輸出數(shù)組的對(duì)應(yīng)軸的長度相同或者長度為一,則這個(gè)數(shù)組能夠用來計(jì)算,否則出錯(cuò).

(4)當(dāng)輸入數(shù)組的某個(gè)軸長度為1時(shí),沿著此軸運(yùn)算時(shí)使用此軸上的第一組值。

1 arr1 = np.array([[0,0,0],[1,1,1],[2,2,2]])
2 arr2 = np.array([1,2,3])
3 print(arr1+arr2)
4 arr3 = np.array([[0,0,0],[1,1,1],[2,2,2]])
5 arr4= np.array([1,2,3]).reshape(3,1)
6 print(arr3+arr4)

?10、利用Numpy進(jìn)行統(tǒng)計(jì)分析

    1.讀、寫文件:

    Numpy文件的讀/寫主要有二進(jìn)制的文件讀/寫和文件列表形式的數(shù)據(jù)讀/寫兩種形式.save函數(shù)主要以二進(jìn)制的格式保存數(shù)據(jù),load函數(shù)從二進(jìn)制的文件中讀取數(shù)據(jù)

    基本語法:np.save(file,arr,allow_pickle=True,fix_imports=Trues) file為文件名稱,arr表示需要保存的數(shù)據(jù),如果需要保存多個(gè)數(shù)組至一個(gè)文件中,可以使用savez函數(shù)

        data = np.load(file) ? 從二進(jìn)制文件中獲取數(shù)據(jù)

        np.savetxt(file,X,delimeter=' ,')需要保存數(shù)據(jù)至文本中,file表示文件名,X表示保存的數(shù)據(jù),delimeter表示分隔符。

        np.loadtxt(file)? 從文本中獲取數(shù)據(jù)

    2.簡單的統(tǒng)計(jì)分析

    

 1 import numpy as np
 2 arr1 = np.array([1,3,4,8,6])
 3 np.sort(arr1)  #對(duì)arr1進(jìn)行排序
 4 arr2= np.random.randint(1,9,(3,3))
 5 arr2.sort(axis=1)   #對(duì)arr2列向排列
 6 print(arr2)
 7 arr2.sort(axis=0)  #對(duì)arr2進(jìn)行橫向排列
 8 arr3 = np.array([1,1,2,5,3,6,4,6,6,8])
 9 print(np.unique(arr3))   #相當(dāng)于 np.sort(set(arr3)) ,對(duì)arr3進(jìn)行去重并排序
10 print(np.tile(arr1,3))   #對(duì)整個(gè)arr1數(shù)組進(jìn)行復(fù)制,3 代表3次
11 print(np.repeat(arr1,2,axis=0))   #對(duì)arr1中的元素進(jìn)行橫向復(fù)制2次
12 print(np.repeat(arr1,2,axis=1))  #對(duì)arr1中元素進(jìn)行列向復(fù)制2次
13 print("arr1數(shù)組的和:",np.sum(arr1))   #計(jì)算數(shù)組的和
14 print("arr2數(shù)組列向的和",np.sum(arr2,axis=0))  #計(jì)算arr2列向的和
15 print("arr2數(shù)組橫向的和",np.sum(arr2,axis=1))  #計(jì)算arr1橫向的和
16 print("arr1數(shù)組的平均值:",np.mean(arr1))  #計(jì)算數(shù)組的平均值
17 print("arr2數(shù)組的縱向的平均值",np.mean(arr2,axis=0))  #計(jì)算列向的平均值
18 print("arr2數(shù)組的橫向平均值:",np.mean(arr2,axis=1))  #計(jì)算橫向的平均值
19 print("方差:",np.var(arr1))  #計(jì)算arr1的方差
20 print("標(biāo)準(zhǔn)差:",np.std(arr1))  #計(jì)算arr1的標(biāo)準(zhǔn)差
21 print("數(shù)組的最大值",np.max(arr1))  #計(jì)算arr1的最大值
22 print("數(shù)組的最小值:",np.min(arr1))  #計(jì)算arr1的最小值
23 print("最大值的索引:",arr1)  #返回最大值的索引
24 print("最小值的索引:",arr1)  #返回最小值的索引
25 print("累計(jì)求和:",np.cumsum(arr1))  #累計(jì)求和
26 print('累積:',np.cumprod(arr1))  #累乘
View Code

11線性代數(shù)

    

 1 import numpy as np
 2 arr1 = np.array([[1,2,3],[2,3,4]])
 3 arr2 = np.array([[1,2],[2,3],[3,4]])
 4 print(arr1@arr2)  #點(diǎn)乘積
 5 print(np.dot(arr1,arr2))  #點(diǎn)乘積
 6 print(arr1*arr1)#逐元素乘積
 7 arr3 = np.array([[1,2,3],[2,3,4],[5,6,7]])
 8 print(np.linalg.inv(arr3))  #inv  求逆矩陣
 9 print(np.diag(arr3))     #將方陣的對(duì)角線元素以一元數(shù)組的形式返回
10 print(np.trace(arr3))  #計(jì)算對(duì)角線元素的和
11 print(np.linalg.det(arr3))  #計(jì)算矩陣的行列式
12 x,y = np.linalg.eig(arr3) #計(jì)算方針的特征值和特征矩陣
13 print(x) #x 特征值,y特征向量
14 print(np.linalg.qr(arr3))  #計(jì)算qr分解
15 print(np.linalg.svd(arr3))  #計(jì)算svd分解
16 #np.linalg.solve(a,b)  #求解方程
17 # np.linalg.lstsq(a,b)  #計(jì)算最小二乘
View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/Ezhizen/p/10274621.html

總結(jié)

以上是生活随笔為你收集整理的我的Python分析成长之路8的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。