最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python Numpy庫常見用法入門教程

 更新時間:2020年01月16日 10:45:18   作者:theVicTory  
這篇文章主要介紹了Python Numpy庫常見用法,結(jié)合實(shí)例形式詳細(xì)Fenix了Python numpy庫基本功能、原理以及數(shù)組常見操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python Numpy庫常見用法。分享給大家供大家參考,具體如下:

1、簡介

Numpy是一個常用的Python科學(xué)技術(shù)庫,通過它可以快速對數(shù)組進(jìn)行操作,包括形狀操作、排序、選擇、輸入輸出、離散傅立葉變換、基本線性代數(shù),基本統(tǒng)計(jì)運(yùn)算和隨機(jī)模擬等。許多Python庫和科學(xué)計(jì)算的軟件包都使用Numpy數(shù)組作為操作對象,或者將傳入的Python數(shù)組轉(zhuǎn)化為Numpy數(shù)組,因此在Python中操作數(shù)據(jù)離不開Numpy。

Numpy的核心是ndarray對象,由Python的n維數(shù)組封裝而來,但通過C語言預(yù)編譯相關(guān)的數(shù)組操作,因此比原生Python具有更高的執(zhí)行效率,但仍然使用Python語言編碼,這樣就同時具有簡潔的代碼和高效的運(yùn)行速度。ndarry與數(shù)組有些區(qū)別值得注意,numpy數(shù)組中的元素都具有相同的類型,并且在創(chuàng)建時就確定了固定的大小,這與Python數(shù)組對象可以動態(tài)增長不同。

2、數(shù)組對象

2.1、屬性

Numpy對象的形式是同構(gòu)多維數(shù)組,數(shù)組的維度稱為軸(axis),每個維度上元素的個數(shù)稱為軸的長度。例如下面是一個2×3的二維數(shù)組arr,第一軸長度為3,第二軸長度為2

arr = [[ 1., 0., 0.],
    [ 0., 1., 2.]]

arr數(shù)組對象常用的屬性如下:

# 數(shù)組軸的個數(shù)
arr.ndim
# 數(shù)組維度及長度,例如2×3的數(shù)組其shape為(2, 3)
arr.shape
# 數(shù)組元素的總個數(shù)
arr.size
# 數(shù)組中元素的數(shù)據(jù)類型
arr.dtype
# 數(shù)組中元素所占字節(jié)數(shù)
arr.itemsize

2.2、創(chuàng)建數(shù)組

可以通過array()方法包裹普通python數(shù)組將其轉(zhuǎn)化為numpy數(shù)組,通過dtype=規(guī)定元素的數(shù)據(jù)類型。數(shù)組可以是二維等高維數(shù)組,也可以是元組的形式。

如果需要填充已知大小的數(shù)組可以使用函數(shù)zeros(),將元素都填充為0,或者ones()將元素填充為1,empty()將元素填充為隨機(jī)數(shù)

arange(a,b,c)函數(shù)用于從a到b每隔c長度生成一個數(shù)組元素。linspace(a,b,c)函數(shù)用于在a到b之間生成c個數(shù)組元素

# 普通數(shù)組轉(zhuǎn)化為numpy數(shù)組
a1 = np.array([2, 3, 4], dtype=float)
print(a1)                  
# 將元組數(shù)組轉(zhuǎn)化為二維numpy數(shù)組
a2 = np.array([(1, 2, 3), (3, 4, 5)])
print(a2)
# 將3×3的數(shù)組用1填充
a3 = np.ones((3, 3))
print(a3)
# 從1到10,每隔2生成一個元素
a4 = np.arange(1, 10, 2)
print(a4)
# 在1到12之間生成4個元素
a5 = np.linspace(1, 12, 4, dtype=int)
print(a5)
 
'''
普通數(shù)組轉(zhuǎn)化為numpy對象:
[2. 3. 4.]
元組數(shù)組:
[[1 2 3]
 [3 4 5]]
用1填充數(shù)組:
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
從1到10每隔2生成一個元素:
[1 3 5 7 9]
在1到12之間生成4個元素:
[ 1 4 8 12]
'''

2.3、數(shù)組操作

算術(shù)運(yùn)算符可以直接運(yùn)用在矩陣上,其結(jié)果是將運(yùn)算應(yīng)用到每個元素上,例如矩陣A*B就是每個元素對應(yīng)相乘,矩陣的乘法運(yùn)算使用的是@符號

A = np.array([[1, 1],
       [0, 1]])
B = np.array([[2, 0],
       [3, 4]])
print(A * B)
print(A @ B)
 
'''
矩陣元素對應(yīng)相乘:
[[2 0]
 [0 4]]
矩陣的乘法:
[[5 4]
 [3 4]]
'''

numpy中有些函數(shù)應(yīng)用于整個數(shù)組,例如求和sum、最大值max、最小值min。如果在這些參數(shù)中指定了某個軸,則應(yīng)用于指定軸。

還有一些函數(shù)應(yīng)用于數(shù)組中的具體元素,例如求sin、cos、exp、開方sqrt等,這些函數(shù)叫做通函數(shù)(ufunc)

a = np.array([[0, 1, 2, 3],
       [4, 5, 6, 7],
       [8, 9, 10, 11]])
print(a.max()) # 求整體的最大值,結(jié)果為11
print(a.sum(axis=0)) # 求每一列的和,結(jié)果為:[12 15 18 21]
print(np.sqrt(a))  # 數(shù)組每個元素求開方

numpy中的數(shù)組同python中的list一樣可以進(jìn)行索引、切片和迭代操作。數(shù)組a[x]代表訪問數(shù)組a下標(biāo)為x的元素,一維數(shù)組a[x:y]代表訪問數(shù)組從x到y(tǒng)的元素,如果省略x代表從頭開始,省略y代表直到結(jié)尾。a[x:y:a]代表從x到y(tǒng)每隔a個元素取一個值,如果a為負(fù)數(shù),代表逆序取值。

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(a[1:3]) # 輸出下標(biāo)為1到3的元素:[1 2]
print(a[::-2]) # 逆序每隔兩個元素選一個值:[9 7 5 3 1]

如果是多維數(shù)組,則索引之間用逗號分隔??梢允褂?..代表省略某幾個維度,如果省略則會被認(rèn)為是該維度全部輸出,例如x[...,3] 等效于 x[:,:,:,:,3]。

可以通過for循環(huán)迭代多為數(shù)組,其內(nèi)容為低一維度的子數(shù)組,如果希望遍歷每一個子元素,可以使用flat屬性。

a = np.array([[0, 1, 2, 3],
       [10, 11, 12, 13],
       [40, 41, 42, 43]])
# 輸出a第一維(行)的前三個,第二維(列)下標(biāo)的1~3
print(a[1:3, 0:3])
# 輸出行的所有,下標(biāo)為2的列
print(a[2, ...])
# 遍歷數(shù)組
for row in a:
  print(row)
# 遍歷每個子元素
for item in a.flat:
  print(item)
 
'''
后兩行的1~3列:
[[10 11 12]
 [40 41 42]]
第三行的所有列:
[40 41 42 43]
遍歷數(shù)組:
[0 1 2 3]
[10 11 12 13]
[40 41 42 43]
遍歷每個元素:
0
1
2
......
41
42
43
'''

除了使用具體數(shù)字作為索引,還可以使用numpy數(shù)組作為索引。例如使用數(shù)組i作為一維數(shù)組a的索引,輸出a[i]。當(dāng)數(shù)組i為多維數(shù)組時,從a中選出元素填到i數(shù)組的對應(yīng)位置

a = np.arange(12) ** 2
print(a)
i = np.array([1, 3, 5])
print(a[i])
# 多維數(shù)組索引j
j = np.array([[3, 4], [9, 7]])
print(a[j])
 
'''
[ 0  1  4  9 16 25 36 49 64 81 100 121]
數(shù)組a的1、3、5個元素
[ 1 9 25]
通過多為索引j取出a的數(shù)據(jù)填到對應(yīng)位置
[[ 9 16]
 [81 49]]
'''

如果a是多維數(shù)組,索引數(shù)組的單個元素代表選中數(shù)組a的第一個維度

如果對多維數(shù)組在多個維度上進(jìn)行索引,則傳入多個索引數(shù)組i,j并用逗號分隔

a = np.array(([[0, 1, 2, 3],
        [4, 5, 6, 7],
        [8, 9, 10, 11]]))
# 多維數(shù)組的單元素索引
i = np.array([0, 1])
print(a[i])
# 對多維數(shù)組提供多維度索引,同時提供i,j代表取出a的[0,2]、[1,3]兩個元素
j = np.array([2, 3])
print(a[i, j])
'''
選擇多維數(shù)組a的第0、1兩行:
[[0 1 2 3]
 [4 5 6 7]]
a的[0,2]、[1,3]兩個元素:
[2 7]
'''

2.4、改變維度

數(shù)組的reshape()方法可以將原數(shù)組重構(gòu)成目標(biāo)維度的數(shù)組,例如將一個2×6的數(shù)組重構(gòu)為3×4的數(shù)組,

數(shù)組在重構(gòu)時不會修改原數(shù)組,而是返回修改后的結(jié)果數(shù)組

值得注意的是數(shù)組在重構(gòu)和打印時都是從最右邊的維度開始往左進(jìn)行,例如下面的3×4的數(shù)組b,先按行排列4個,然后再換行,排列這樣的3行。如果是多維,則按這樣的行列繼續(xù)輸出。如果數(shù)組維度為-1,則會自動計(jì)算該維度的大小,例如含有12個元素的數(shù)組,第二、第三維是3×2,則第一維就是2

ravel()函數(shù)可以將數(shù)組展成一維數(shù)組。

a=np.array([[1,2,3,4,5,6],
      [7,8,9,10,11,12]])
b=a.reshape(3,4)
print(b)
# 多維數(shù)組,自動計(jì)算
print(a.reshape(-1,3,2))
# 展開數(shù)組
flatted = b.ravel()
print(flatted, end=' ')
'''
[[ 1 2 3 4]
 [ 5 6 7 8]
 [ 9 10 11 12]]
2×3×2的多維數(shù)組:
[[[ 1 2]
 [ 3 4]
 [ 5 6]]

 [[ 7 8]
 [ 9 10]
 [11 12]]]
展開數(shù)組:
[ 1 2 3 4 5 6 7 8 9 10 11 12] 
'''

numpy的hstack()函數(shù)可以在水平方向上合并多個數(shù)組,vstack()函數(shù)可以在垂直方向上合并多個數(shù)組

相反地,hsplit()、vsplit()可以拆分為指定數(shù)量的數(shù)組

a=np.array([1,2,3])
b=np.array([4,5,6])
# 垂直方向合并
c=np.vstack((a,b))
print(c)
# 水平方向合并
print(np.hstack((a,b)))
# 水平方向拆分
print(np.hsplit(c,3))
'''
垂直堆疊
[[1 2 3]
 [4 5 6]]
水平合并
[1 2 3 4 5 6]
水平拆分為三個1×2的:
[array([[1],
    [4]]), 
array([[2],
    [5]]), 
array([[3],
    [6]])]
'''

2.5、數(shù)組的復(fù)制

當(dāng)一個數(shù)組對象賦值給一個新的變量時,是新開辟一個存儲空間還是只是傳遞一個引用?答案是引用。

例如執(zhí)行語句b=a,只是將一個引用傳給了b,對b執(zhí)行的操作會直接影響a。查看a、b兩個對象的節(jié)點(diǎn)id也是一樣的

a = np.array([1, 2, 3])
b = a
# 修改b
b[0] = 0
print(a)
# 輸出a、b對象的id
print(id(a), id(b))
 
'''
修改b,a也發(fā)生了變化
[0 2 3]
查看二者的id
2290013812656 2290013812656
'''

通過切片返回?cái)?shù)組的視圖,修改視圖的形狀不會影響原數(shù)組,但是在視圖上修改數(shù)據(jù)原數(shù)組也會改變。在執(zhí)行del a之后,由于c引用了a,a依舊會存在內(nèi)存中不會被刪除

c = a[:]
# 修改視圖的形狀
c.shape = 3, 1
print(c, a)
# 修改視圖c的數(shù)據(jù)
c[0] = 1
print(a[0])
 
'''
對視圖c的形狀做修改,a不會受到影響
[[0]
 [2]
 [3]] [0 2 3]
修改c的數(shù)據(jù),a也會隨之改變:
1

通過copy()方法可以生成數(shù)據(jù)的副本,因此對副本的操作完全不會影響原數(shù)組

d= a.copy()
d[0]=5
# 修改數(shù)組的副本d,a不受影響,輸出a:[1 2 3]
print(a)

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python tkinter GUI繪制,以及點(diǎn)擊更新顯示圖片代碼

    python tkinter GUI繪制,以及點(diǎn)擊更新顯示圖片代碼

    這篇文章主要介紹了python tkinter GUI繪制,以及點(diǎn)擊更新顯示圖片代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python?graphviz畫圖詳情

    python?graphviz畫圖詳情

    這篇文章主要介紹了python?graphviz畫圖詳情,文章圍繞graphviz畫圖的相關(guān)資料展開內(nèi)容,并附有官方安裝鏈接,需要的小伙伴可以參考一下,洗碗給對你有所幫助
    2021-12-12
  • 如何將matlab數(shù)據(jù)導(dǎo)入到Python中使用

    如何將matlab數(shù)據(jù)導(dǎo)入到Python中使用

    這篇文章主要介紹了如何將matlab數(shù)據(jù)導(dǎo)入到Python中使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • virtualenv介紹及簡明教程

    virtualenv介紹及簡明教程

    這篇文章主要介紹了virtualenv介紹及簡明教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Python pandas入門系列之眾數(shù)和分位數(shù)

    Python pandas入門系列之眾數(shù)和分位數(shù)

    分位數(shù)(Quantile),也稱分位點(diǎn),是指將一個隨機(jī)變量的概率分布范圍分為幾個等份的數(shù)值點(diǎn),分析其數(shù)據(jù)變量的趨勢,而眾數(shù)(Mode)是代表數(shù)據(jù)的一般水平,這篇文章主要給大家介紹了Python pandas系列之眾數(shù)和分位數(shù)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Python數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列及二叉樹定義與用法淺析

    Python數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列及二叉樹定義與用法淺析

    這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列及二叉樹定義與用法,結(jié)合具體實(shí)例形式分析了Python數(shù)據(jù)結(jié)構(gòu)中棧、隊(duì)列及二叉樹的定義與使用相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • PyCharm+PySpark遠(yuǎn)程調(diào)試的環(huán)境配置的方法

    PyCharm+PySpark遠(yuǎn)程調(diào)試的環(huán)境配置的方法

    今天小編就為大家分享一篇PyCharm+PySpark遠(yuǎn)程調(diào)試的環(huán)境配置的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python中處理字符串之endswith()方法的使用簡介

    Python中處理字符串之endswith()方法的使用簡介

    這篇文章主要介紹了Python中處理字符串之endswith()方法的使用,是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Python正則re模塊使用步驟及原理解析

    Python正則re模塊使用步驟及原理解析

    這篇文章主要介紹了Python正則re模塊使用步驟及原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • python pytorch模型轉(zhuǎn)onnx模型的全過程(多輸入+動態(tài)維度)

    python pytorch模型轉(zhuǎn)onnx模型的全過程(多輸入+動態(tài)維度)

    這篇文章主要介紹了python pytorch模型轉(zhuǎn)onnx模型的全過程(多輸入+動態(tài)維度),本文給大家記錄記錄了pt文件轉(zhuǎn)onnx全過程,簡單的修改即可應(yīng)用,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-03-03

最新評論

昆明市| 龙泉市| 前郭尔| 肇州县| 中超| 临夏县| 永寿县| 金沙县| 龙海市| 建水县| 德州市| 内丘县| 蓝山县| 吐鲁番市| 象州县| 临漳县| 汝南县| 磴口县| 年辖:市辖区| 丹江口市| 吴堡县| 淮北市| 绥德县| 新野县| 吉首市| 定安县| 东莞市| 安岳县| 隆德县| 巨鹿县| 廊坊市| 镇沅| 香港| 卢龙县| 旅游| 七台河市| 抚顺县| 屯留县| 前郭尔| 阿勒泰市| 井研县|