一区二区三区中文国产亚洲_另类视频区第一页_日韩精品免费视频_女人免费视频_国产综合精品久久亚洲

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > Python模塊:NumPy的高性能科學(xué)計(jì)算

Python模塊:NumPy的高性能科學(xué)計(jì)算

來源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-07-21 16:43:54 1689929034

一、NumPy初識(shí)

NumPy是Python中最流行的科學(xué)計(jì)算庫之一。它提供多維數(shù)組對(duì)象和一系列用于處理數(shù)組的函數(shù)。NumPy的核心是ndarray(n-dimensional array)對(duì)象,它是一個(gè)大小固定、同一類型元素的多維數(shù)組。

在使用NumPy之前,需要先安裝它。使用pip命令可以很輕松地安裝它。在終端中輸入以下命令即可:


pip install numpy

成功安裝后,我們可以導(dǎo)入NumPy并查看其版本:


import numpy as np

print(np.__version__)

輸出的結(jié)果應(yīng)該類似于“1.16.2”。

二、NumPy數(shù)組

NumPy中最重要的對(duì)象是ndarray??梢杂靡韵麓a創(chuàng)建一個(gè)一維數(shù)組:


import numpy as np

arr1d = np.array([1, 2, 3, 4, 5])
print(arr1d)

輸出結(jié)果:[1 2 3 4 5]

也可以創(chuàng)建二維、三維甚至更高維度的數(shù)組。

從列表創(chuàng)建ndarray時(shí),NumPy會(huì)嘗試自動(dòng)推導(dǎo)出數(shù)組中元素的類型:


import numpy as np

arr1d = np.array([1, 2, 3, 4, 5])
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

print(arr1d.dtype)
print(arr2d.dtype)
print(arr3d.dtype)

輸出結(jié)果:


int64
int64
int64

可以看出,NumPy會(huì)嘗試選擇最小的數(shù)據(jù)類型以儲(chǔ)存數(shù)組中的元素。在這個(gè)例子中,數(shù)組中的元素都是整數(shù),所以NumPy選擇了int64類型。

數(shù)組中的元素可以使用下標(biāo)進(jìn)行訪問,如:


import numpy as np

arr1d = np.array([1, 2, 3, 4, 5])
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

print(arr1d[0])
print(arr2d[0, 1])
print(arr3d[1, 0, 1])

輸出結(jié)果:


1
2
6

三、NumPy的高級(jí)用法

1、數(shù)組操作

數(shù)組拼接、分裂、重塑、轉(zhuǎn)置、展平等操作是NumPy中最常用的操作之一。在此僅介紹其中的一些,更多操作請(qǐng)參考NumPy文檔。

例如,可以使用以下代碼將兩個(gè)一維數(shù)組沿著列方向拼接:


import numpy as np

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

result = np.concatenate([arr1, arr2])

print(result)

輸出結(jié)果:[1 2 3 4 5 6]

還可以在二維數(shù)組上進(jìn)行拼接操作,如下:


import numpy as np

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

result = np.concatenate([arr1, arr2], axis=0)

print(result)

輸出結(jié)果:


[[1 2]
 [3 4]
 [5 6]]

還可以使用vstack或hstack函數(shù)將數(shù)組沿著垂直或水平方向拼接。

重塑數(shù)組可以使用reshape函數(shù)。例如,可以將一個(gè)一維數(shù)組重塑為3x3的二維數(shù)組:


import numpy as np

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

result = arr.reshape((3, 3))

print(result)

輸出結(jié)果:


[[1 2 3]
 [4 5 6]
 [7 8 9]]

transpos函數(shù)可以將數(shù)組轉(zhuǎn)置,如下:


import numpy as np

arr = np.arange(9).reshape((3,3))

result = np.transpose(arr)

print(result)

輸出結(jié)果:


[[0 3 6]
 [1 4 7]
 [2 5 8]]

flatten函數(shù)可以將多維數(shù)組展平為一維數(shù)組,如下:


import numpy as np

arr = np.arange(9).reshape((3,3))

result = arr.flatten()

print(result)

輸出結(jié)果:


[0 1 2 3 4 5 6 7 8]

2、數(shù)組運(yùn)算

NumPy提供了大量的數(shù)學(xué)函數(shù)和運(yùn)算符,可以像操作標(biāo)量一樣操作數(shù)組。

可以使用以下代碼實(shí)現(xiàn)數(shù)組的加減乘除:


import numpy as np

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

print(a + b)
print(a - b)
print(a * b)
print(a / b)

輸出結(jié)果:


[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4  0.5 ]

可以使用以下代碼實(shí)現(xiàn)數(shù)組的矩陣乘法:


import numpy as np

a = np.array([[1,2], [3,4]])
b = np.array([[5,6], [7,8]])

print(np.dot(a, b))

輸出結(jié)果:


[[19 22]
 [43 50]]

3、數(shù)組統(tǒng)計(jì)

NumPy可以進(jìn)行各種統(tǒng)計(jì)運(yùn)算,如平均值、標(biāo)準(zhǔn)差、最大值、最小值等。

可以使用以下代碼求數(shù)組的平均值、標(biāo)準(zhǔn)差、最大值、最小值:


import numpy as np

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

print(np.mean(arr))
print(np.std(arr))
print(np.max(arr))
print(np.min(arr))

輸出結(jié)果:


3.0
1.4142135623730951
5
1

除了一維數(shù)組之外,NumPy還可以對(duì)多維數(shù)組進(jìn)行統(tǒng)計(jì)運(yùn)算。例如,可以使用以下代碼計(jì)算二維數(shù)組中每一列的平均值:


import numpy as np

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

print(np.mean(arr, axis=0))

輸出結(jié)果:


[3. 4.]

4、廣播

廣播是指在對(duì)兩個(gè)數(shù)組進(jìn)行元素操作時(shí),當(dāng)數(shù)組的形狀不同時(shí),對(duì)小數(shù)組進(jìn)行擴(kuò)張以匹配大數(shù)組的形狀。廣播操作可以減少內(nèi)存使用和運(yùn)算次數(shù)。

以下代碼示例演示了廣播的基本原理:


import numpy as np

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

result = arr1 * arr2

print(result)

輸出結(jié)果:


[ 4 10 18]

可以看出,數(shù)組arr1和arr2的形狀不同,但是它們的元素相乘得到的結(jié)果仍然是一個(gè)長(zhǎng)度為3的數(shù)組。

5、隨機(jī)數(shù)生成

NumPy還提供了大量的隨機(jī)數(shù)生成函數(shù)。隨機(jī)數(shù)生成函數(shù)可以用于模擬隨機(jī)數(shù)據(jù)、生成測(cè)試數(shù)據(jù)等。

以下代碼示例生成20個(gè)范圍在0-1之間的隨機(jī)數(shù):


import numpy as np

result = np.random.rand(20)

print(result)

輸出結(jié)果:


[0.13966633 0.8146751  0.78852179 0.45093637 0.73117035 0.7654889
 0.83504567 0.61635283 0.2246247  0.43220779 0.95162422 0.77052108
 0.55811285 0.61789821 0.24398802 0.02599477 0.82493305 0.36772928
 0.19407716 0.1476306 ]

6、圖片處理

NumPy還可以用于圖像的處理。下面的這個(gè)例子把圖片中的每一個(gè)像素都進(jìn)行了翻轉(zhuǎn):


import numpy as np
from PIL import Image

im = Image.open("test.jpg")
im.show()

im_arr = np.array(im)
im_arr_flip = np.fliplr(im_arr)
im_flip = Image.fromarray(im_arr_flip)

im_flip.show()

輸出結(jié)果:


 #顯示原圖

 #顯示翻轉(zhuǎn)后的圖

7、數(shù)據(jù)存取

NumPy可以方便地將數(shù)組保存到文件中,并從文件中讀取數(shù)組數(shù)據(jù)。

以下代碼示例將數(shù)組保存到文件中,并從文件中讀取出來:


import numpy as np

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

np.save("arr.npy", arr)

arr_loaded = np.load("arr.npy")

print(arr_loaded)

輸出結(jié)果:


[1 2 3 4 5]

總結(jié)

這篇文章介紹了NumPy的基本用法,包括數(shù)組的創(chuàng)建、統(tǒng)計(jì)、數(shù)組運(yùn)算、廣播、隨機(jī)數(shù)生成、圖片處理等。NumPy功能非常強(qiáng)大,有助于我們進(jìn)行高效的科學(xué)計(jì)算。

tags: python教程
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
為什么Hadoop是用Java實(shí)現(xiàn)的?

一、跨平臺(tái)能力多平臺(tái)運(yùn)行:Java的“一次編寫,到處運(yùn)行”理念,使得Hadoop能在各種操作系統(tǒng)和硬件上運(yùn)行,不需要特定的調(diào)整。廣泛應(yīng)用:這一特...詳情>>

2023-10-15 16:51:37
ECU是什么?

1、ECU的基本定義與作用ECU,全稱為電子控制單元,是一種專門用于控制汽車各個(gè)系統(tǒng)的微處理器控制系統(tǒng)。通過接收傳感器的信號(hào)并轉(zhuǎn)換成控制指令...詳情>>

2023-10-15 16:29:54
什么是SOA?

1、SOA的基本概念與核心原則SOA是一種使軟件組件通過網(wǎng)絡(luò)進(jìn)行互操作的架構(gòu)模式。核心原則包括:可發(fā)現(xiàn)的服務(wù):服務(wù)應(yīng)容易發(fā)現(xiàn)和理解。松耦合:...詳情>>

2023-10-15 16:19:32
什么是內(nèi)存池?

1、內(nèi)存池的基本概念內(nèi)存池是一種內(nèi)存管理策略,旨在優(yōu)化內(nèi)存分配性能和減少碎片化。通過將內(nèi)存分配到大小固定的池中,應(yīng)用程序可以快速、高效...詳情>>

2023-10-15 16:16:15
ci構(gòu)建與編譯的區(qū)別是什么?

一、功能與目的構(gòu)建(Build): 構(gòu)建是將源代碼轉(zhuǎn)化為可執(zhí)行代碼的過程,它包括編譯、鏈接、打包等一系列步驟。構(gòu)建不僅僅局限于編譯,還可能涉...詳情>>

2023-10-15 15:57:11
快速通道