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

Python中NumPy庫(kù)的核心知識(shí)總結(jié)大全

 更新時(shí)間:2025年11月20日 08:30:14   作者:shasha225_  
NumPy是Python編程語(yǔ)言中一個(gè)開(kāi)源的數(shù)值計(jì)算擴(kuò)展庫(kù),它為Python提供了高性能的多維數(shù)組對(duì)象以及一系列用于處理這些數(shù)組的數(shù)學(xué)函數(shù),是科學(xué)計(jì)算、數(shù)據(jù)分析等領(lǐng)域的基礎(chǔ)工具之一,這篇文章主要介紹了Python中NumPy庫(kù)的核心知識(shí)總結(jié)大全,需要的朋友可以參考下

一、核心對(duì)象:ndarray(N維數(shù)組)

1.1 定義與特點(diǎn)

  • ndarray:存儲(chǔ)同類型元素的多維容器,所有元素必須是同一數(shù)據(jù)類型(同構(gòu)性),這是其高性能的基礎(chǔ)。
  • 與 Python 列表的區(qū)別
    • 列表可存儲(chǔ)不同類型元素,而 ndarray 元素類型統(tǒng)一。
    • 列表不支持向量化運(yùn)算(如 list1 + list2 是拼接,而非元素相加),ndarray 支持。

1.2 核心屬性

屬性描述示例(arr = np.array([[1,2],[3,4]]))
shape數(shù)組維度的元組,格式為 (維度1大小, 維度2大小, ...)(2, 2)(2 行 2 列)
dtype元素的數(shù)據(jù)類型(如 int32、float64int64(默認(rèn)整數(shù)類型)
ndim數(shù)組的維度數(shù)(秩)2(二維數(shù)組)
size數(shù)組元素的總個(gè)數(shù)(shape 各元素乘積)4(2×2)
itemsize單個(gè)元素的字節(jié)大小8int64 占 8 字節(jié))
nbytes數(shù)組總字節(jié)大?。?code>size × itemsize)32(4×8)
data指向數(shù)組數(shù)據(jù)的緩沖區(qū)(一般不直接使用)內(nèi)存地址指針

示例

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)   # (2, 3)
print(arr.dtype)   # int64
print(arr.ndim)    # 2
print(arr.size)    # 6

二、數(shù)組創(chuàng)建方法

2.1 從 Python 序列創(chuàng)建

  • 基礎(chǔ)語(yǔ)法np.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
    • object:輸入序列(列表、元組等)。
    • dtype:指定數(shù)據(jù)類型(如 np.int32np.float64),不指定則自動(dòng)推斷。
    • ndmin:指定最小維度數(shù)(不足則補(bǔ)維度)。

示例

# 1維數(shù)組
arr1 = np.array([1, 2, 3, 4])
# 2維數(shù)組(列表嵌套列表)
arr2 = np.array([[1, 2], [3, 4]], dtype=np.float32)  # 指定為32位浮點(diǎn)數(shù)
# 強(qiáng)制為3維數(shù)組(即使輸入是2維)
arr3 = np.array([[1, 2], [3, 4]], ndmin=3)  # shape 為 (1, 2, 2)

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

函數(shù)描述示例
np.zeros(shape)創(chuàng)建全 0 數(shù)組np.zeros((2,3)) → 2 行 3 列全 0 數(shù)組
np.ones(shape)創(chuàng)建全 1 數(shù)組np.ones(5) → 1 維 5 元素全 1 數(shù)組
np.full(shape, val)創(chuàng)建填充指定值 val 的數(shù)組np.full((2,2), 10) → 2×2 全 10 數(shù)組
np.empty(shape)創(chuàng)建未初始化數(shù)組(值為內(nèi)存隨機(jī)值,速度快)np.empty((3,3))
np.arange(start, stop, step)生成整數(shù)序列(類似 range,但返回?cái)?shù)組),start 默認(rèn)為 0,step默認(rèn)為 1np.arange(1, 10, 2) → [1,3,5,7,9]
np.linspace(start, stop, num)生成 num 個(gè)等間隔的數(shù)(包含 start 和 stopnp.linspace(0, 1, 5) → [0,0.25,0.5,0.75,1]
np.eye(n, k=0)創(chuàng)建 n×n 單位矩陣(對(duì)角線為 1,其余為 0),k 控制對(duì)角線偏移(正上負(fù)下)np.eye(3, k=1) → 上對(duì)角線為 1
np.diag(arr)從 1 維數(shù)組創(chuàng)建對(duì)角矩陣,或從多維數(shù)組提取對(duì)角線np.diag([1,2,3]) → 3×3 對(duì)角矩陣

2.3 隨機(jī)數(shù)組(np.random模塊)

函數(shù)描述
np.random.rand(d0, d1, ...)生成 [0,1) 均勻分布的隨機(jī)數(shù)數(shù)組
np.random.randn(d0, d1, ...)生成標(biāo)準(zhǔn)正態(tài)分布(均值 0,方差 1)的隨機(jī)數(shù)數(shù)組
np.random.randint(low, high, size)生成 [low, high) 范圍內(nèi)的隨機(jī)整數(shù)數(shù)組
np.random.choice(arr, size)從 arr 中隨機(jī)采樣生成數(shù)組
np.random.shuffle(arr)原地打亂數(shù)組順序(僅對(duì)第一維有效)

示例

np.random.rand(2, 3)  # 2行3列 [0,1) 隨機(jī)數(shù)
np.random.randint(1, 10, size=(3,))  # 1維3元素,值在1~9之間

三、數(shù)組操作(維度與形態(tài))

3.1 維度調(diào)整

  • reshape(shape):返回一個(gè)新數(shù)組,維度為 shape,原數(shù)組不變(需滿足 size 一致)。
arr = np.arange(12)  # shape (12,)
arr_reshape = arr.reshape(3, 4)  # shape (3,4),元素不變
  • flatten() vs ravel():均將數(shù)組降為 1 維,區(qū)別在于:
    • flatten():返回原數(shù)組的副本(修改新數(shù)組不影響原數(shù)組)。
    • ravel():返回原數(shù)組的視圖(修改新數(shù)組會(huì)影響原數(shù)組,內(nèi)存效率更高)。
arr = np.array([[1,2],[3,4]])
arr_flat = arr.flatten()  # 副本
arr_rav = arr.ravel()     # 視圖
  • newaxis:為數(shù)組增加一個(gè)維度(常用于廣播或匹配維度)。
arr = np.array([1,2,3])  # shape (3,)
arr_2d = arr[np.newaxis, :]  # shape (1,3)(行向量)
arr_2d_col = arr[:, np.newaxis]  # shape (3,1)(列向量)

3.2 數(shù)組拼接

  • np.concatenate(arrays, axis=0):沿指定軸拼接多個(gè)數(shù)組(要求除拼接軸外,其他維度大小一致)。
    • axis=0:垂直拼接(行方向),axis=1:水平拼接(列方向)。
  • 簡(jiǎn)化函數(shù)
    • np.vstack(tup):垂直拼接(等價(jià)于 concatenate(tup, axis=0))。
    • np.hstack(tup):水平拼接(等價(jià)于 concatenate(tup, axis=1))。
    • np.dstack(tup):深度拼接(沿第三維,適合 3D 數(shù)組)。

示例

a = np.array([[1,2], [3,4]])  # shape (2,2)
b = np.array([[5,6], [7,8]])  # shape (2,2)
np.concatenate([a, b], axis=0)  # 垂直拼接 → shape (4,2)
np.hstack([a, b])  # 水平拼接 → shape (2,4)

3.3 數(shù)組分割

  • np.split(ary, indices_or_sections, axis=0):沿指定軸分割數(shù)組。
    • indices_or_sections:若為整數(shù) n,則平均分成 n 份;若為列表,則按索引分割。
  • 簡(jiǎn)化函數(shù)np.vsplit(垂直分割)、np.hsplit(水平分割)、np.dsplit(深度分割)。

示例

arr = np.arange(12).reshape(3,4)  # shape (3,4)
# 按索引分割(axis=0,行方向)
np.split(arr, [1,3], axis=0)  # 分割為 [0:1行, 1:3行]
# 平均分成2份(axis=1,列方向)
np.hsplit(arr, 2)  # 分割為 [0:2列, 2:4列]

3.4 轉(zhuǎn)置與軸交換

  • arr.T:數(shù)組轉(zhuǎn)置(適用于 2D 數(shù)組,行變列、列變行)。
  • arr.transpose(*axes):自定義軸的順序(多維數(shù)組常用)。
arr = np.arange(8).reshape(2,2,2)  # shape (2,2,2)
arr_trans = arr.transpose(1,0,2)  # 交換0軸和1軸,新shape (2,2,2)

四、索引與切片(元素訪問(wèn))

NumPy 支持多種索引方式,用于精準(zhǔn)訪問(wèn)數(shù)組元素。

4.1 基本索引(單元素訪問(wèn))

  • 多維數(shù)組用逗號(hào)分隔各維度索引:arr[dim0_idx, dim1_idx, ...]。
  • 索引從 0 開(kāi)始,支持負(fù)索引(-1 表示最后一個(gè)元素)。

示例

arr = np.array([[1,2,3], [4,5,6], [7,8,9]])  # 3×3數(shù)組
print(arr[0, 1])  # 第0行第1列 → 2
print(arr[2, -1])  # 第2行最后一列 → 9

4.2 切片(范圍訪問(wèn))

  • 語(yǔ)法:start:end:stepstart 默認(rèn)為 0,end 默認(rèn)為維度大小,step 默認(rèn)為 1)。
  • 多維切片:各維度切片用逗號(hào)分隔,: 表示取該維度所有元素。

示例

arr = np.arange(12).reshape(3,4)  # 3行4列:[[0,1,2,3],[4,5,6,7],[8,9,10,11]]
# 取第1行(索引0)的第1到第3列(不包含3)
print(arr[0, 1:3])  # [1,2]
# 取第0到第2行(不包含2)的所有列
print(arr[0:2, :])  # [[0,1,2,3], [4,5,6,7]]
# 每隔1行取1行,每隔2列取1列
print(arr[::2, ::2])  # [[0,2], [8,10]]

4.3 布爾索引(條件篩選)

  • 用布爾數(shù)組(與原數(shù)組同 shape)篩選元素,結(jié)果為滿足條件的元素組成的 1 維數(shù)組。

示例

arr = np.array([[1,2,3], [4,5,6], [7,8,9]])
# 篩選大于5的元素
mask = arr > 5  # 布爾數(shù)組:[[False,False,False], [False,False,True], [True,True,True]]
print(arr[mask])  # [6,7,8,9]
# 復(fù)合條件(需用 & 連接,而非 and)
print(arr[(arr > 3) & (arr < 8)])  # [4,5,6,7]

4.4 花式索引(指定位置訪問(wèn))

  • 用整數(shù)數(shù)組(列表)指定需要訪問(wèn)的索引,結(jié)果為對(duì)應(yīng)位置元素組成的新數(shù)組。

示例

arr = np.array([10, 20, 30, 40, 50])
# 1維數(shù)組:取索引0, 2, 4的元素
print(arr[[0, 2, 4]])  # [10,30,50]
 
# 2維數(shù)組:取 (0,1)、(2,3) 位置的元素
arr2d = np.arange(12).reshape(3,4)
print(arr2d[[0,2], [1,3]])  # [1, 11]

注意

  • 切片返回的是原數(shù)組的視圖(修改會(huì)影響原數(shù)組)。
  • 布爾索引和花式索引返回的是副本(修改不影響原數(shù)組)。

五、廣播機(jī)制(Broadcasting)

廣播是 NumPy 中不同形狀數(shù)組進(jìn)行算術(shù)運(yùn)算的核心機(jī)制,無(wú)需手動(dòng)擴(kuò)展數(shù)組維度。

5.1 廣播規(guī)則

  1. 維度對(duì)齊:若兩個(gè)數(shù)組維度不同,在形狀較短的數(shù)組前補(bǔ) 1,直到維度數(shù)相同。
    • 例:shape (2,3) 與 shape (3,) → 補(bǔ) 1 后為 (2,3) 與 (1,3)。
  2. 維度兼容:對(duì)于對(duì)齊后的每個(gè)維度,若大小相同,或其中一個(gè)為 1,則兼容;否則報(bào)錯(cuò)。
    • 兼容示例:(2,3) 與 (1,3) → 第 0 維 2 vs 1(兼容),第 1 維 3 vs 3(兼容)。
    • 不兼容示例:(2,3) 與 (2,4) → 第 1 維 3 vs 4(不兼容,報(bào)錯(cuò))。
  3. 擴(kuò)展維度:兼容的維度中,大小為 1 的維度會(huì)被擴(kuò)展為與另一個(gè)數(shù)組相同的大小(虛擬擴(kuò)展,不占用內(nèi)存)。

5.2 廣播示例

# 示例1:1維數(shù)組與標(biāo)量廣播
a = np.array([1, 2, 3])
b = 2
print(a + b)  # [3,4,5](b 廣播為 [2,2,2])
 
# 示例2:2維數(shù)組與1維數(shù)組廣播
a = np.array([[1,2,3], [4,5,6]])  # shape (2,3)
b = np.array([10, 20, 30])        # shape (3,) → 廣播為 (1,3) → 再擴(kuò)展為 (2,3)
print(a + b)  # [[11,22,33], [14,25,36]]
 
# 示例3:高維廣播
a = np.ones((2, 1, 3))  # shape (2,1,3)
b = np.ones((1, 2, 3))  # shape (1,2,3)
# 對(duì)齊維度后:(2,1,3) 與 (1,2,3) → 擴(kuò)展為 (2,2,3)
print((a + b).shape)  # (2,2,3)

六、數(shù)學(xué)運(yùn)算

6.1 元素級(jí)運(yùn)算

支持 +-、*/、**(冪)、%(取模)等運(yùn)算符,或?qū)?yīng)的函數(shù)(如 np.add)。

示例

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)  # [5,7,9](元素相加)
print(a * b)  # [4,10,18](元素相乘)
print(a **2)  # [1,4,9](元素平方)
print(np.subtract(b, a))  # [3,3,3](等價(jià)于 b - a)

6.2 聚合函數(shù)(沿軸運(yùn)算)

對(duì)數(shù)組沿指定軸(axis)進(jìn)行統(tǒng)計(jì)或聚合,返回標(biāo)量或降維數(shù)組。

函數(shù)描述示例(arr = np.array([[1,2],[3,4]]))
np.sum(arr, axis)求和np.sum(arr, axis=0) → [4,6](按列求和)
np.mean(arr, axis)均值np.mean(arr) → 2.5(全局均值)
np.median(arr, axis)中位數(shù)np.median(arr, axis=1) → [1.5, 3.5](按行求中位數(shù))
np.max(arr, axis) / np.min(arr, axis)最大 / 最小值np.max(arr, axis=0) → [3,4]
np.std(arr, axis) / np.var(arr, axis)標(biāo)準(zhǔn)差 / 方差np.std(arr) → ~1.118
np.cumsum(arr, axis)累積和np.cumsum(arr) → [1,3,6,10]

注意axis 不指定時(shí),默認(rèn)對(duì)全局所有元素運(yùn)算。

6.3 矩陣運(yùn)算

-** 矩陣乘法 **:np.dot(a, b) 或 a @ b(要求 a 的列數(shù) = b 的行數(shù))。

a = np.array([[1,2], [3,4]])  # 2×2矩陣
b = np.array([[5,6], [7,8]])  # 2×2矩陣
print(a @ b)  # 等價(jià)于 np.dot(a,b) → [[19,22], [43,50]]

-** 矩陣轉(zhuǎn)置 :a.T(行變列,列變行)。

- 其他矩陣函數(shù) **:np.linalg.inv(a)(矩陣求逆)、np.linalg.det(a)(行列式)、np.linalg.eig(a)(特征值和特征向量)等。

七、數(shù)據(jù)類型(dtype)與轉(zhuǎn)換

7.1 常用數(shù)據(jù)類型

NumPy 支持比 Python 更多的數(shù)據(jù)類型,常見(jiàn)類型如下:

類型描述示例
int8/int16/int32/int64有符號(hào)整數(shù)(8/16/32/64 位)np.int32
uint8/uint16...無(wú)符號(hào)整數(shù)(僅正整數(shù))np.uint8
float16/float32/float64浮點(diǎn)數(shù)(精度遞增)np.float64(默認(rèn))
complex64/complex128復(fù)數(shù)(實(shí)部 + 虛部)np.complex128
bool布爾值(True/False)np.bool_
string_字符串(固定長(zhǎng)度)np.string_

7.2 數(shù)據(jù)類型轉(zhuǎn)換

  • 用 arr.astype(dtype) 轉(zhuǎn)換,返回新數(shù)組(原數(shù)組不變)。

示例

arr = np.array([1, 2, 3], dtype=np.int32)
arr_float = arr.astype(np.float64)  # 轉(zhuǎn)為float64 → [1. 2. 3.]
arr_str = arr.astype(np.string_)    # 轉(zhuǎn)為字符串 → [b'1' b'2' b'3']

總結(jié) 

到此這篇關(guān)于Python中NumPy庫(kù)核心知識(shí)總結(jié)大全的文章就介紹到這了,更多相關(guān)Python NumPy庫(kù)核心知識(shí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 創(chuàng)建TCP服務(wù)器的方法

    Python 創(chuàng)建TCP服務(wù)器的方法

    這篇文章主要介紹了Python 創(chuàng)建TCP服務(wù)器的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Flask后臺(tái)線程中的請(qǐng)求上下文問(wèn)題分析與解決方案

    Flask后臺(tái)線程中的請(qǐng)求上下文問(wèn)題分析與解決方案

    在Flask開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到需要在后臺(tái)線程中執(zhí)行耗時(shí)操作的情況,然而,如果在后臺(tái)線程中直接訪問(wèn)Flask的request對(duì)象,就會(huì)遇到RuntimeError: Working outside of request context錯(cuò)誤,所以本文將通過(guò)一個(gè)實(shí)際案例,分析錯(cuò)誤原因,并提供3種解決方案
    2025-05-05
  • 簡(jiǎn)單介紹Python中的filter和lambda函數(shù)的使用

    簡(jiǎn)單介紹Python中的filter和lambda函數(shù)的使用

    這篇文章主要簡(jiǎn)單介紹了Python中的filter和lambda函數(shù)的使用,是Python學(xué)習(xí)中的基礎(chǔ),同時(shí)lambda匿名函數(shù)的使用也是經(jīng)常被用來(lái)對(duì)比各種編程語(yǔ)的重要特性,言需要的朋友可以參考下
    2015-04-04
  • Django在admin后臺(tái)集成TinyMCE富文本編輯器的例子

    Django在admin后臺(tái)集成TinyMCE富文本編輯器的例子

    今天小編就為大家分享一篇Django在admin后臺(tái)集成TinyMCE富文本編輯器的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • python使用selenium爬蟲(chóng)知乎的方法示例

    python使用selenium爬蟲(chóng)知乎的方法示例

    這篇文章主要介紹了python使用selenium爬蟲(chóng)知乎的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 進(jìn)一步探究Python中的正則表達(dá)式

    進(jìn)一步探究Python中的正則表達(dá)式

    這篇文章主要介紹了Python中的正則表達(dá)式的一些用法,正則表達(dá)式的使用是Python學(xué)習(xí)進(jìn)階中的重要知識(shí),需要的朋友可以參考下
    2015-04-04
  • Pycharm學(xué)習(xí)教程(1) 定制外觀

    Pycharm學(xué)習(xí)教程(1) 定制外觀

    這篇文章主要介紹了最全的Pycharm學(xué)習(xí)教程第一篇如何定制外觀,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Python包模塊與模塊導(dǎo)入查找順序詳解

    Python包模塊與模塊導(dǎo)入查找順序詳解

    Python模塊是.py文件,包含__init__.py,導(dǎo)入查找順序?yàn)閟ys模塊緩存、當(dāng)前目錄、PYTHONPATH、Lib、site-packages,命名空間分local、global、built-in,文件類型包括.pyc、.pyd、.dll等,用于存儲(chǔ)編譯結(jié)果
    2025-09-09
  • 使用Jest?在?Visual?Studio?Code?中進(jìn)行單元測(cè)試的流程分析

    使用Jest?在?Visual?Studio?Code?中進(jìn)行單元測(cè)試的流程分析

    Jest是一個(gè)流行的JavaScript測(cè)試框架,它提供了簡(jiǎn)潔、靈活和強(qiáng)大的工具來(lái)編寫(xiě)和運(yùn)行單元測(cè)試,今天通過(guò)本文給大家介紹使用Jest在Visual Studio Code中進(jìn)行單元測(cè)試的流程分析,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • 使用python求解迷宮問(wèn)題的三種實(shí)現(xiàn)方法

    使用python求解迷宮問(wèn)題的三種實(shí)現(xiàn)方法

    關(guān)于迷宮問(wèn)題,常見(jiàn)會(huì)問(wèn)能不能到達(dá)某點(diǎn),以及打印到達(dá)的最短路徑,下面這篇文章主要給大家介紹了關(guān)于如何使用python求解迷宮問(wèn)題的三種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

玛纳斯县| 津南区| 太仆寺旗| 禄丰县| 柳州市| 广汉市| 高台县| 乌拉特中旗| 江孜县| 黄山市| 桐乡市| 河北省| 吉隆县| 漯河市| 孝感市| 丹东市| 吉木乃县| 织金县| 樟树市| 怀安县| 甘肃省| 楚雄市| 东阳市| 祁连县| 桂平市| 海城市| 黄平县| 黑龙江省| 六枝特区| 东港市| 宁津县| 黄骅市| 龙游县| 湛江市| 黄陵县| 河曲县| 万年县| 铜梁县| 察雅县| 荃湾区| 兰西县|