欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python基礎(chǔ)教程之NumPy庫的使用詳解

 更新時間:2023年07月07日 08:36:48   作者:陸理手記  
NumPy(Numerical Python)是一個用于處理數(shù)組的Python庫,學(xué)習(xí)機(jī)器學(xué)習(xí)的過程中先學(xué)會使用NumPy是非常重要的,所以本文就給大家詳細(xì)介紹一下如何使用NumPy庫,需要的小伙伴跟著小編一起來看看吧

1. 為什么要學(xué)習(xí)NumPy?

NumPy(Numerical Python)是一個用于處理數(shù)組的Python庫,學(xué)習(xí)機(jī)器學(xué)習(xí)的過程中先學(xué)會使用NumPy是非常重要的,為什么要學(xué)習(xí)NumPy呢?原因如下:

  • 數(shù)組操作和運(yùn)算:NumPy提供了高效的數(shù)組操作和數(shù)學(xué)運(yùn)算功能,這對于處理和轉(zhuǎn)換數(shù)據(jù)是至關(guān)重要的。在機(jī)器學(xué)習(xí)中,你經(jīng)常需要對數(shù)據(jù)進(jìn)行處理、轉(zhuǎn)換和重塑,使用NumPy可以方便地進(jìn)行這些操作。

  • 高性能計算:NumPy是基于C語言實現(xiàn)的,它的計算效率非常高。在機(jī)器學(xué)習(xí)中,處理大規(guī)模的數(shù)據(jù)和進(jìn)行復(fù)雜的數(shù)學(xué)計算是很常見的。NumPy提供了高性能的數(shù)組操作和數(shù)學(xué)運(yùn)算,能夠有效地處理這些任務(wù)。

  • 數(shù)據(jù)表示和處理:在機(jī)器學(xué)習(xí)中,數(shù)據(jù)通常以多維數(shù)組的形式表示。NumPy提供了靈活和高效的多維數(shù)組操作,使你能夠方便地表示和處理各種類型的數(shù)據(jù),包括圖像、文本等。

  • 庫的依賴性:許多常用的機(jī)器學(xué)習(xí)庫和框架,如Scikit-learn、TensorFlow和PyTorch,都依賴于NumPy。學(xué)會使用NumPy可以幫助你更好地理解和使用這些庫和框架,以便更好地進(jìn)行機(jī)器學(xué)習(xí)任務(wù)。

綜上所述,學(xué)習(xí)機(jī)器學(xué)習(xí)之前先學(xué)會使用NumPy是為了更好地處理和處理數(shù)據(jù)、進(jìn)行高性能計算,并為后續(xù)學(xué)習(xí)和使用其他機(jī)器學(xué)習(xí)庫打下堅實的基礎(chǔ)。

2.安裝使用NumPy

首先,我們需要確保已經(jīng)安裝了NumPy庫。可以通過在終端或命令提示符中運(yùn)行以下命令來安裝NumPy:

pip install numpy

安裝完成后,我們就可以開始使用NumPy。

#導(dǎo)入NumPy庫
import numpy as np

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

NumPy最強(qiáng)大的功能之一是創(chuàng)建多維數(shù)組。我們可以使用NumPy的array()函數(shù)來創(chuàng)建數(shù)組。

例如,我們可以創(chuàng)建一個一維數(shù)組:

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

輸出:

[1 2 3 4 5]

 我們也可以創(chuàng)建一個二維數(shù)組:

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

輸出:

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

3.1 數(shù)組屬性

NumPy數(shù)組有許多重要的屬性,可以幫助我們了解數(shù)組的特征。

arr = np.array([1, 2, 3, 4, 5])
print("數(shù)組形狀:", arr.shape)
print("數(shù)組維度:", arr.ndim)
print("數(shù)組元素總數(shù):", arr.size)
print("數(shù)組數(shù)據(jù)類型:", arr.dtype)

輸出:

數(shù)組形狀: (5,)
數(shù)組維度: 1
數(shù)組元素總數(shù): 5
數(shù)組數(shù)據(jù)類型: int32

3.2 數(shù)組操作

NumPy提供了許多數(shù)組操作的功能,例如數(shù)組索引、切片和形狀變換等。

arr = np.array([1, 2, 3, 4, 5])
print("第一個元素:", arr[0])
print("前兩個元素:", arr[:2])
print("倒數(shù)三個元素:", arr[-3:])

輸出:

第一個元素: 1
前兩個元素: [1 2]
倒數(shù)三個元素: [3 4 5]

3.3 數(shù)組運(yùn)算

NumPy支持對數(shù)組進(jìn)行基本的數(shù)學(xué)運(yùn)算,例如加法、減法、乘法和除法。

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print("加法:", arr1 + arr2)
print("減法:", arr1 - arr2)
print("乘法:", arr1 * arr2)
print("除法:", arr1 / arr2)

輸出:

加法: [5 7 9]
減法: [-3 -3 -3]
乘法: [ 4 10 18]
除法: [0.25 0.4  0.5 ]

3.4 常用函數(shù)

NumPy還提供了許多常用的函數(shù),例如求和、平均值、最大值和最小值。

arr = np.array([1, 2, 3, 4, 5])
print("求和:", np.sum(arr))
print("平均值:", np.mean(arr))
print("最大值:", np.max(arr))
print("最小值:", np.min(arr))

輸出為:

求和: 15
平均值: 3.0
最大值: 5
最小值: 1

4. NumPy高級用法

4.1 廣播(Broadcasting)

NumPy數(shù)組廣播是一種自動執(zhí)行元素級操作的機(jī)制。它可以使具有不同形狀的數(shù)組在算術(shù)運(yùn)算中表現(xiàn)得像具有相同形狀的數(shù)組一樣。這種機(jī)制大大簡化了對不同形狀數(shù)組之間的操作。

下面是一個示例代碼,演示了如何使用廣播來執(zhí)行數(shù)組的加法運(yùn)算:

import numpy as np
arr1 = np.array([[1, 2, 3],
                 [4, 5, 6]])
arr2 = np.array([10, 20, 30])
result = arr1 + arr2
print(result)

在上面的代碼中,arr1 是一個形狀為 (2, 3) 的二維數(shù)組,arr2 是一個形狀為 (3,) 的一維數(shù)組。根據(jù)廣播規(guī)則,arr2 實際上被擴(kuò)展為了形狀為 (2, 3) 的二維數(shù)組,其中每一行都是 arr2。然后,數(shù)組 arr1 和擴(kuò)展后的 arr2 進(jìn)行元素級加法運(yùn)算,得到了最終的結(jié)果。

輸出結(jié)果為:

[[11 22 33]
[14 25 36]]

通過廣播機(jī)制,我們可以直接對不同大小的數(shù)組執(zhí)行加法操作,而不需要手動進(jìn)行數(shù)組形狀的調(diào)整。這樣可以大大簡化代碼,并提高效率。同時,廣播機(jī)制也可以應(yīng)用于其他的 NumPy 函數(shù)和運(yùn)算中。

4.2 高級索引

NumPy提供了多種高級索引技巧,用于訪問數(shù)組的特定位置。以下是三種常用的高級索引方法:

  • 整數(shù)數(shù)組索引:使用一個整數(shù)數(shù)組作為索引,可以選擇數(shù)組中的特定元素。
import numpy as np
a = np.array([1, 2, 3, 4, 5])
# 使用整數(shù)數(shù)組索引獲取指定位置的元素
indices = np.array([1, 3])
result = a[indices]
print(result)

輸出:

[2, 4]

  • 布爾數(shù)組索引:使用一個布爾數(shù)組作為索引,可以根據(jù)布爾數(shù)組的元素值來選擇數(shù)組中的元素。
import numpy as np
a = np.array([1, 2, 3, 4, 5])
# 使用布爾數(shù)組索引選擇大于3的元素
mask = a > 3
result = a[mask]
print(result)

輸出:

[4, 5]

還可以按布爾數(shù)組進(jìn)行匹配

arr = np.array([1, 2, 3, 4, 5])
mask = np.array([True, False, True, False, True])  # 選擇為True的元素
print(arr[mask])  # 輸出 [1 3 5]
  • 花式索引(Fancy indexing):使用整數(shù)數(shù)組或整數(shù)列表作為索引,可以根據(jù)指定的索引位置選擇數(shù)組中的元素。
import numpy as np
a = np.array([1, 2, 3, 4, 5])
# 使用花式索引獲取指定位置的元素
indices = np.array([0, 2, 4])
result = a[indices]
print(result)

輸出:

array([1, 3, 5])

多維數(shù)組的操作與此類似,如果有時間,不妨在上述例子上動手試一下,記住,如果使用負(fù)整數(shù),索引會從末尾倒著開始哦。

4.3 數(shù)組操作

NumPy提供了一些方便的函數(shù)來操作數(shù)組,包括連接數(shù)組、分割數(shù)組、改變數(shù)組形狀和交換數(shù)組維度等。

  • 連接數(shù)組:使用np.concatenate()函數(shù)沿指定軸連接數(shù)組
import numpy as np
a = np.array([[1, 2],
              [3, 4]])
b = np.array([[5, 6],
              [7, 8]])
# 沿行方向連接數(shù)組
result = np.concatenate((a, b), axis=0)
print(result)

輸出:

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

2. 分割數(shù)組:使用np.split()函數(shù)將數(shù)組分割為多個子數(shù)組

import numpy as np
a = np.array([1, 2, 3, 4, 5])
# 將數(shù)組分割為3個子數(shù)組
result = np.array_split(a, 3)
print(result)

輸出:

[array([1, 2]), array([3, 4]), array([5])]

np.array_split()是 NumPy 中用于將數(shù)組拆分成多個子數(shù)組的函數(shù)。它接受三個參數(shù):數(shù)組、拆分的位置或拆分的索引、拆分的軸。當(dāng)我們拆分多維數(shù)組時,又會發(fā)生什么呢?

import numpy as np
# 創(chuàng)建一個數(shù)組
arr = np.arange(1, 13).reshape(3, 4)
print("原始數(shù)組:")
print(arr)
# 對數(shù)組進(jìn)行拆分
sub_arrays = np.array_split(arr, 2, axis=1)
print("\n拆分后的子數(shù)組:")
for sub_arr in sub_arrays:
    print(sub_arr)

運(yùn)行這段代碼,輸出將是:

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

拆分后的子數(shù)組:
[[ 1  2]
 [ 5  6]
 [ 9 10]]
[[ 3  4]
 [ 7  8]
 [11 12]]

wahoo,很明顯,拆分根據(jù)axis參數(shù),只獲取二維原始數(shù)組(2-D)中的前2列,即在原始二維數(shù)組arr的每個元素下標(biāo)為axis=1的位置停止了。

在這個示例中,我們創(chuàng)建了一個 3 行 4 列的數(shù)組 arr,然后使用 np.array_split(arr, 2, axis=1) 將數(shù)組拆分成兩個子數(shù)組。拆分的結(jié)果是一個包含兩個數(shù)組的列表 sub_arrays,要注意的是,拆分的軸參數(shù)axis是可選的。如果沒有提供軸參數(shù),np.array_split() 默認(rèn)在 0 軸(行)上進(jìn)行拆分。

  • 改變數(shù)組形狀:使用np.reshape()函數(shù)改變數(shù)組的形狀
import numpy as np
a = np.array([[1, 2, 3],
              [4, 5, 6]])
# 將數(shù)組轉(zhuǎn)換為2x3的形狀
result = np.reshape(a, (2, 3))
print(result)

輸出:

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

4. 交換數(shù)組維度:使用np.transpose()函數(shù)交換數(shù)組的維度

import numpy as np
a = np.array([[1, 2, 3],
              [4, 5, 6]])
# 交換數(shù)組的維度
result = np.transpose(a)
print(result)

輸出:

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

4.4 ufunc函數(shù)

ufunc(universal functions)是一種可以對數(shù)組進(jìn)行元素級運(yùn)算的函數(shù)。NumPy提供了許多ufunc函數(shù),如np.add()np.subtract()、np.multiply()np.divide()等。以下是一個簡單的示例:

import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 對數(shù)組進(jìn)行元素級加法運(yùn)算
result = np.add(a, b)
print(result)

輸出:

[5, 7, 9]

4.5 矩陣運(yùn)算

NumPy支持矩陣運(yùn)算,可以使用np.dot()函數(shù)計算兩個數(shù)組的矩陣乘法。另外,np.linalg模塊提供了一些常用的線性代數(shù)函數(shù),如計算逆矩陣、解線性方程組、計算特征值和特征向量等。以下是一個簡單的例子:

import numpy as np
a = np.array([[1, 2],
              [3, 4]])
b = np.array([[5, 6],
              [7, 8]])
# 計算兩個數(shù)組的矩陣乘法
result = np.dot(a, b)
print(result)

輸出:

[[19, 22]
[43, 50]])

4.6 數(shù)組的高級排序

除了常規(guī)的排序方法外,NumPy還提供了一些高級的排序技巧。np.lexsort()函數(shù)可以根據(jù)鍵的組合對多個數(shù)組進(jìn)行排序。np.argsort()函數(shù)返回數(shù)組排序后的索引,而不是排序后的實際值。以下是一個簡單的示例:

import numpy as np
a = np.array([3, 1, 2])
b = np.array([5, 4, 6])
# 根據(jù)a和b的值對數(shù)組進(jìn)行排序
indices = np.lexsort((b, a))
sorted_array = a[indices]
print(sorted_array)

輸出:

[1, 2, 3]

np.lexsort 函數(shù)是 NumPy 中用于執(zhí)行間接排序的函數(shù)。它將根據(jù)給定的鍵序列對數(shù)組進(jìn)行排序,并返回排序后的索引。

具體來說,lexsort 函數(shù)使用鍵序列的最后一個鍵進(jìn)行排序,然后使用倒數(shù)第二個鍵進(jìn)行排序,以此類推,直到使用第一個鍵進(jìn)行排序。這樣,最終得到的索引序列將使數(shù)組按照鍵序列逐級排序。

讓我們通過一個示例來演示 lexsort 函數(shù)的用法:

import numpy as np
# 創(chuàng)建一個包含姓名的字符串?dāng)?shù)組,
names = np.array(['Alice', 'Bob', 'Charlie', 'David'])
# 創(chuàng)建一個二維數(shù)組,分別代表上述學(xué)生的語文、數(shù)學(xué)、英語成績
scores = np.array([[70, 85, 90],
                   [60, 75, 80],
                   [80, 90, 85],
                   [75, 80, 70]])
# 使用 lexsort 對數(shù)組進(jìn)行排序、按
sorted_indices = np.lexsort((scores[:, 1], scores[:, 2], scores[:, 0]))
# 根據(jù)排序后的索引序列獲取排序后的數(shù)組和姓名
sorted_scores = scores[sorted_indices]
sorted_names = names[sorted_indices]
print("Sorted Scores:")
print(sorted_scores)
print("\nSorted Names:")
print(sorted_names)

輸出結(jié)果為:

Sorted Scores:
[[60 75 80]
 [70 85 90]
 [75 80 70]
 [80 90 85]]

Sorted Names:
['Bob' 'Alice' 'David' 'Charlie']

在上面的示例中,我們使用 lexsort 函數(shù)根據(jù)每個學(xué)生的成績(先按照數(shù)學(xué)成績排序,然后按照英語成績排序,最后按照語文成績排序)對學(xué)生的記錄進(jìn)行排序。最后,我們根據(jù)排序后的索引序列獲取了排序后的數(shù)組和姓名。

5. 總結(jié)

NumPy是Python科學(xué)計算的核心庫之一,廣泛用于數(shù)據(jù)處理、統(tǒng)計分析和數(shù)值計算。

NumPy的高級用法能夠提高代碼的靈活性和效率,讓我們更方便地處理不同形狀的數(shù)組、獲取特定位置的元素,并對數(shù)組進(jìn)行各種操作。通過學(xué)習(xí)以上幾個高級用法,我們可以更好地利用NumPy進(jìn)行科學(xué)計算和數(shù)據(jù)處理。希望本教程對您有所幫助。

以上就是Python基礎(chǔ)教程之NumPy庫的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Python NumPy庫的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Django mysqlclient安裝和使用詳解

    Django mysqlclient安裝和使用詳解

    這篇文章主要介紹了Django mysqlclient安裝和使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python命令行庫click的具體使用

    Python命令行庫click的具體使用

    本文主要介紹了Python命令行庫click的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 詳解python中的hashlib模塊的使用

    詳解python中的hashlib模塊的使用

    這篇文章主要介紹了python中的hashlib模塊的使用,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-04-04
  • Python開發(fā)工具Pycharm的安裝以及使用步驟總結(jié)

    Python開發(fā)工具Pycharm的安裝以及使用步驟總結(jié)

    今天給大家?guī)淼氖顷P(guān)于Python開發(fā)工具的安裝以及使用的相關(guān)知識,文章圍繞著如何使用和安裝Pycharm展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • flask框架實現(xiàn)修改密碼和免密登錄功能

    flask框架實現(xiàn)修改密碼和免密登錄功能

    flask是python web開發(fā)的常用框架之一。本文將講述flask如何實現(xiàn)修改密碼和免密登錄功能
    2021-05-05
  • Python之日期與時間處理模塊(date和datetime)

    Python之日期與時間處理模塊(date和datetime)

    這篇文章主要介紹了Python之日期與時間處理模塊(date和datetime),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • python flask解析json數(shù)據(jù)不完整的解決方法

    python flask解析json數(shù)據(jù)不完整的解決方法

    這篇文章主要介紹了python flask解析json數(shù)據(jù)不完整的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Python技巧之實現(xiàn)批量統(tǒng)一圖片格式和尺寸

    Python技巧之實現(xiàn)批量統(tǒng)一圖片格式和尺寸

    大家在工作的時候基本都會接觸到很多的圖片,有時為了不同的工作需求需要修改圖片的尺寸或者大小。本文為大家整理了Python批量轉(zhuǎn)換圖片格式和統(tǒng)一圖片尺寸,希望對大家有所幫助
    2023-05-05
  • python tiktoken的簡介、安裝、使用方法

    python tiktoken的簡介、安裝、使用方法

    tiktoken是OpenAI于近期開源的Python第三方模塊,該模塊主要實現(xiàn)了tokenizer的BPE(Byte pair encoding)算法,并對運(yùn)行性能做了極大的優(yōu)化,本文將介紹python tiktoken的簡介、安裝、使用方法,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • pandas去重復(fù)行并分類匯總的實現(xiàn)方法

    pandas去重復(fù)行并分類匯總的實現(xiàn)方法

    這篇文章主要介紹了pandas去重復(fù)行并分類匯總的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01

最新評論