无主之地2配置高吗|看真人裸体BBBBB|秋草莓丝瓜黄瓜榴莲色多多|真人強奷112分钟|精品一卡2卡3卡四卡新区|日本成人深夜苍井空|八十年代动画片

網易首頁 > 網易號 > 正文 申請入駐

人工智能通識課:NumPy 基礎

0
分享至

人工智能中的大量問題,無論是數據預處理、特征表示、模型輸入,還是結果計算,本質上都離不開對數值數據的組織、變換與運算。要理解后續的數據分析、機器學習乃至深度學習,就必須先理解:如何把數據表示成可計算的結構,以及如何高效地對這些數據進行批量處理。

NumPy(Numerical Python)正是 Python 中承擔這一基礎任務的核心工具。它以 ndarray 為中心,把標量、向量、矩陣以及更高維數據統一到同一種數組結構中,使我們能夠用更簡潔、更高效的方式完成索引、切片、統計、變形與運算等操作。因此,學習 NumPy,實質上是在為后續學習人工智能相關內容打地基。

安裝 NumPy:

pip install numpy

導入 NumPy:

import numpy as np

本次課圍繞一個具體任務展開:用 NumPy 處理一張學生成績表。像學生成績表這樣“行列規則清楚、元素都是數值”的數據,本質上就是 NumPy 最適合處理的二維數組場景。

通過這一任務,逐步學習如何建立數組、理解結構、提取數據、完成統計、調整形狀并保存結果,從而在真實問題中掌握 NumPy 的核心用法。

一、用學生成績表理解 NumPy 數組

假設某班有 4 名學生,學習了 3 門課程:語文、數學、英語。現在要把他們的成績整理成一張表。

print(scores)

說明:scores 就是一個 NumPy 數組對象,類型為 ndarray。

這張成績表可以這樣理解:

每一行表示一位學生;

每一列表示一門課程;

每個位置上的數值表示某位學生某門課的成績。

這正是 NumPy 最擅長處理的數據形式,因為學生成績表本質上是一張規則的數值型二維表。

NumPy 數組的核心特點可以概括為三點:

其一,同構性,即同一個數組中的元素通常具有統一的數據類型;

其二,多維性,即它可以表示 0 維、1 維、2 維及更高維數據;

其三,規則性,即二維數組的每一行長度應一致,更高維數組的結構也必須規則。

查看 scores 的類型:

print(type(scores))

輸出:

這說明它已經不是普通列表,而是 NumPy 的數組對象。

從更一般的角度看,NumPy 數組并不只用來表示成績表。一個數、一列數據、一張二維表,甚至更高維的數據結構,都可以用數組表示。但對于入門來說,把它先理解成“適合計算的數值表格”,通常最容易把握。

二、數組的結構:維度、形狀與數據類型

建立成績表之后,第一步不是立刻做計算,而是先看清這張表本身的結構。NumPy 中最基礎的幾個結構屬性,正好可以回答這個問題。

print("數據類型:", scores.dtype)

輸出(示意):

數據類型: int64

這幾個結果分別表示不同含義。

1、維度:ndim

ndim 表示數組有多少個維度。這里成績表是二維的,所以結果是 2。

可以粗略理解為:

0 維:一個數(標量 Scalar)

1 維:一列數據(向量 Vector)

2 維:一張表(矩陣 Matrix)

3 維及以上:更復雜的數據塊(張量 Tensor)

2、形狀:shape

shape 的返回值是一個元組,用來描述各維度的長度。

這里結果是 (4, 3),說明:

有 4 行,即 4 位學生;

有 3 列,即 3 門課程。

3、元素總數:size

size 表示數組中元素總數。這里共有 4 × 3 = 12 個成績,所以結果是 12。

4、數據類型:dtype

dtype 表示數組中元素的數據類型。由于這里都是整數成績,所以通常會顯示為整數類型。

NumPy 數組通常要求元素類型統一,這也是它能高效進行批量運算的重要原因之一。

三、數組從哪里來:創建與基本查看

前面的成績表是直接手工錄入的,這當然是最直觀的方式。

但在實際使用中,數組既可以由現有數據轉換而來,也可以按規律、按模板或按隨機方式批量生成。

1、把已有數據變成數組

這是最基礎的方式。比如使用 np.array() 可將 Python 列表轉換成 NumPy 數組:

])

或者:

arr = np.array([1, 2, 3], dtype=float)  # 顯式指定元素類型為浮點型

dtype= 參數可用于顯式指定數組元素類型,這在后續數值計算中很常見。

從語法上看,np.array(5) 可創建 0 維數組,np.array([1, 2, 3]) 可創建 1 維數組,np.array([[1, 2], [3, 4]]) 可創建 2 維數組。理解這一點,有助于后面進一步理解維度與形狀。

2、用規律生成一組數據

例如,使用 np.arange() 生成 0 到 9 的整數:

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

使用 np.linspace() 可生成某個區間上均勻分布的數:

# [  0.  20.  40.  60.  80. 100.]

如果想生成等比序列,可以使用 np.logspace():

 # [  10.  100. 1000.]

這類方法常用于模擬數據、構造測試數據或生成連續數值。arange() 更強調步長,linspace() 強調區間內點數,logspace() 則強調按對數刻度生成數值。

3、創建特殊數組

有時我們需要先創建一張“空白成績表”或“模板表”,再逐步填入數據。這時可以使用:

full = np.full((4, 3), 60)

它們分別表示:

np.zeros():創建全 0 數組;

np.ones():創建全 1 數組;

np.full():創建全部填充為指定值的數組。

如果要創建單位矩陣,可以使用 np.eye() 和 np.identity():

identity_arr = np.identity(3)

單位矩陣指的是對角線全 1,其它元素全 0 的數組:

 [0. 0. 1.]]

4、創建未初始化數組

有時只想先申請一塊內存,而暫時不關心其中的值,可以使用 np.empty():

empty_arr = np.empty((2, 3))

需要注意,np.empty() 創建出來的數組元素值是未初始化的,因此通常不可直接當作有效數據使用,它更適合在后續會立即覆蓋賦值的場景。

5、生成隨機數據

如果想模擬一張隨機成績表,也可以這樣寫:

random_scores = np.random.randint(60, 101, size=(4, 3))

seed(42) 用于固定隨機結果,保證每次運行都一致;

randint(60, 101, size=(4, 3)) 表示生成一個 4 行 3 列、分數范圍在 60 到 100 之間的整數數組。

四、如何取數據與改數據:索引、切片和賦值

有了成績表之后,最自然的問題就是:怎樣查看某位學生的成績,怎樣提取某門課程的數據,怎樣修改錄入錯誤的分數。這些問題都屬于同一類操作:從數組中取數據、改數據。

1、查看某位學生的全部成績

數組索引從 0 開始。支持負索引,-1 表示最后一個元素。

print("第三位學生的成績:", scores[2])

scores[0] 表示第 0 行,即第一位學生的全部成績。

2、查看某門課程的全部成績

二維及更高維數組都要用逗號分隔不同維度。

冒號 : 單獨使用時,表示該維度的所有元素。

print("全班英語成績:", scores[:, 2])

scores[:, 0] 表示所有學生的第 1 門課成績;

scores[:, 1] 表示所有學生的第 2 門課成績。

3、查看某位學生某門課程的成績

print(scores[-1, -1])  # 最后一位學生的最后一門課程成績

說明:[1, 2] 表示第 2 位學生、第 3 門課程。

4、提取成績表中的一部分

一維切片的基本語法為:

array[start:stop:step]

例如,提取前兩位學生的全部成績:

print(scores[:2])

提取前兩門課程的成績:

print(scores[:, :2])

提取左上角的一個 2×2 子表:

print(scores[:2, :2])  # [start:stop] 形式切片;取前兩行、前兩列

這些都屬于切片操作??梢园阉斫獬蓪Ρ砀竦囊粔K區域進行截取。

5、修改分數

如果發現錄入錯誤,也可以直接改寫數組中的元素。

例如,將第一位學生的英語成績從 80 改成 82:

print(scores)

也可以修改整行數據。例如更新第四位學生的全部成績:

print(scores)

五、讓整張表一起運算:整體運算與廣播

NumPy 最核心的優勢之一,就是它支持整體運算。也就是說,不必逐個元素寫循環,而是可以直接讓整張成績表參與計算。

1、整體加分:數組與標量的運算

假設學校決定每門課統一加 5 分,可以直接寫:

print(boosted_scores)

說明:+ 5 會自動作用到成績表中的每一個元素上。

如果要求“最高不超過 100 分”,可以使用 np.clip():

print(boosted_scores)

這表示把所有結果限制在 0 到 100 的范圍內。

2、比較目標成績:數組與數組的運算

假設我們還想看看每位學生與目標分數之間的差距,可以建立一張目標分數表:

print(gap)

這里的減法是逐元素運算。兩個形狀相同的數組會在對應位置上一一相減。

3、不同課程加不同分:廣播

如果不是每門課統一加 5 分,而是:

語文加 2 分;

數學加 5 分;

英語加 3 分;

那么可以這樣寫:

print(adjusted_scores)

說明:之所以能直接相加,是因為 NumPy 的廣播機制在起作用??梢灾庇^地理解為:這組長度為 3 的加分規則,會自動應用到每一位學生身上。

更準確地說,這是因為 scores 的形狀是 (4, 3),而 bonus 的形狀是 (3,),二者在列方向上可以對齊,因此能夠進行廣播。

六、真正開始分析成績:統計函數與 axis

成績表建立好了,數據也會查看和修改了,接下來最重要的任務就是統計分析。例如:

每位學生總分是多少;

每位學生平均分是多少;

各科平均分是多少;

各科最高分、最低分分別是多少。

這些問題都要用到 NumPy 的統計函數,而其中最關鍵的概念是 axis。

axis 可理解為“按哪一個維度進行聚合”。對一維數組而言,通常只有 axis=0;對二維數組而言,常見的是 axis=0 和 axis=1。

1、計算每位學生的總分和平均分

print("每位學生平均分:", mean_scores)

為什么這里用 axis=1?因為每一行表示一位學生,按行統計,就能得到每位學生的總體表現。

2、計算各科平均分、最高分和最低分

print("各科最低分:", subject_min)

說明:使用 axis=0,因為每一列表示一門課程,按列統計,就能得到課程維度的結果。

3、幾種常見統計函數

除了總和、平均值、最大值、最小值,NumPy 還提供了幾種很常見的統計函數:

print("各科最低分所在行索引:", np.argmin(scores, axis=0))

其中:

np.median():計算中位數;

np.std():計算標準差;

np.var():計算方差;

np.argmin():返回最小值位置的索引。

如果想看累積求和,也可以使用 np.cumsum():

print("第一位學生成績累積和:", np.cumsum(scores[0]))

np.cumsum() 返回累積和,在某些分析任務中也很有用。

七、整理和擴展成績表:變形、轉置、展平與拼接

在實際使用中,我們并不只是對現有成績表做運算,還常常需要調整表的結構。例如:

一串分數要重新整理成表格;

希望從“按學生看成績”切換成“按課程看成績”;

把表格展平成一維序列;

增加一位新學生;

增加一門新課程。

這些操作雖然表面不同,但本質上都屬于“調整數組結構”。

1、變形:reshape()

假設現在有 12 個分數,按順序存放在一個一維數組中:

print(table_scores)

說明:reshape(4, 3) 的含義,是把這 12 個數重新組織為 4 行 3 列的一張表。

這說明,變形并不是改變數據本身,而是改變數據的組織方式。

2、resize():原地修改形狀

除了 np.reshape(),NumPy 還提供 np.resize():

print(arr)

reshape() 通常返回新的視圖或新結構,而 resize() 會原地修改數組本身,因此入門階段更常用、也更安全的寫法通常還是 reshape()。

3、轉置:交換觀察角度

print(scores.T)

轉置以后:

原來每一行表示學生;

現在每一行變成課程。

轉置的意義不只是數學上的形式變化,也是在切換觀察數據的角度。

4、展平:flatten() 與 ravel()

有時我們希望把二維表“拉平”為一維數組,這時可以使用展平操作。

print(flat2)

二者的區別在于:

np.flatten() 返回的是拷貝;

np.ravel() 通常返回的是視圖,修改結果可能影響原數組。

例如:

print(scores)

拷貝表示生成一份獨立數據;視圖表示與原數組共享底層數據,因此修改時可能聯動。

5、增加一位新學生

如果新來一位學生,三門成績分別為 91、86、88,可以這樣添加:

print(new_scores)

說明:使用 np.vstack(),因為新增學生,本質上是新增一行。

6、增加一門新課程

如果現在又增加一門物理課,4 位學生的物理成績如下:

print(scores_with_physics)

說明:使用 np.hstack(),因為新增課程,本質上是新增一列。

除了 vstack() 和 hstack(),NumPy 還提供 stack(),它的特點是新增一個維度后再堆疊數組。

變形、轉置、展平和拼接,本質上都是在調整數組的組織結構。

八、綜合示例:完成一次完整的成績表分析與保存

最后,把前面的知識放到同一個示例中,完成一次較完整的成績表分析,并把結果保存下來。

文件讀寫說明:

np.save() / np.load() 讀寫的是 NumPy 原生二進制格式 .npy,適合完整保存數組結構與數據類型;

np.savetxt() / np.loadtxt() 適合讀寫文本文件,便于人工查看,但讀入結果默認常為浮點型;如需整數,可結合參數進一步控制。

小結

本次課以學生成績表為例,學習了 NumPy 數組的基本概念、創建方法、結構屬性、索引與切片、整體運算、統計分析、形狀調整以及文件讀寫等內容。通過這些基礎知識,可以初步建立面向數組進行數據組織與計算的認識。

應用實例:


點贊有美意,贊賞是鼓勵

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
財務造假!10家A股公司退市,超25萬股東踩雷

財務造假!10家A股公司退市,超25萬股東踩雷

21世紀經濟報道
2026-06-12 18:59:56
普京再次回應戰爭起源:不是俄開戰,是基輔先向頓巴斯開火

普京再次回應戰爭起源:不是俄開戰,是基輔先向頓巴斯開火

桂系007
2026-06-12 23:57:08
美加墨世界杯第二場比賽就現空座,票價爭議浮出水面

美加墨世界杯第二場比賽就現空座,票價爭議浮出水面

澎湃新聞
2026-06-12 17:40:29
剛剛,人類歷史上首位萬億美元富豪誕生!

剛剛,人類歷史上首位萬億美元富豪誕生!

每日經濟新聞
2026-06-12 22:32:06
英媒一語驚人:中美貿易戰中,美國唯獨算錯的是中國的底牌!

英媒一語驚人:中美貿易戰中,美國唯獨算錯的是中國的底牌!

流史歲月
2026-06-12 18:30:08
現在的年輕人不敢開房了

現在的年輕人不敢開房了

微微熱評
2026-06-13 00:53:53
看完世界杯第2場,球迷看清了3個不爭事實,韓國最擅長踢歐洲球隊

看完世界杯第2場,球迷看清了3個不爭事實,韓國最擅長踢歐洲球隊

侃球熊弟
2026-06-12 11:56:01
CCTV5直播!世界杯“重頭戲”,超21億歐元對決,姆巴佩PK哈蘭德

CCTV5直播!世界杯“重頭戲”,超21億歐元對決,姆巴佩PK哈蘭德

麥子的籃球故事
2026-06-12 17:40:17
阿里高層這次真的生氣了

阿里高層這次真的生氣了

一見財經
2026-06-12 11:11:21
國安部披露:在我國某海域發現有較大型活體海洋動物被掛上傳感器,竊取海洋敏感數據

國安部披露:在我國某海域發現有較大型活體海洋動物被掛上傳感器,竊取海洋敏感數據

每日經濟新聞
2026-06-12 13:16:05
中國斷供稀土5個多月,日本工廠無一停產,是真擺脫了還是在硬撐

中國斷供稀土5個多月,日本工廠無一停產,是真擺脫了還是在硬撐

次元君情感
2026-06-01 14:27:53
63歲阿湯哥被曝“越老越瘋”,同行都看不下去了

63歲阿湯哥被曝“越老越瘋”,同行都看不下去了

生活觀察員啊
2026-06-11 01:22:03
打臉CBA,懷特塞德高調加入其他聯賽沒有傷病,上海隊陷入爭議

打臉CBA,懷特塞德高調加入其他聯賽沒有傷病,上海隊陷入爭議

宗介說體育
2026-06-12 16:35:22
美軍開始空襲伊朗

美軍開始空襲伊朗

財聯社
2026-06-11 05:42:11
劉宇寧發文回應戀情:清醒坦蕩的態度,才是明星該有的模樣

劉宇寧發文回應戀情:清醒坦蕩的態度,才是明星該有的模樣

陳意小可愛
2026-06-13 00:50:31
“張雪機車”獲得WSBK艾米利亞-羅馬涅站桿位賽第三名

“張雪機車”獲得WSBK艾米利亞-羅馬涅站桿位賽第三名

極目新聞
2026-06-12 23:00:07
中央開始嚴查,多地機關事業單位大整頓啟動,這幾類人受影響最大

中央開始嚴查,多地機關事業單位大整頓啟動,這幾類人受影響最大

職場資深秘書
2026-06-12 14:47:02
老人入住精神病院7年后查出梅毒;哈爾濱精神專科白漁泡醫院稱系舊疾,家屬出示入院前梅毒陰性檢測報告反駁

老人入住精神病院7年后查出梅毒;哈爾濱精神??瓢诐O泡醫院稱系舊疾,家屬出示入院前梅毒陰性檢測報告反駁

大風新聞
2026-06-12 12:12:20
內塔尼亞胡:特朗普不打伊朗了,沒提前告訴我

內塔尼亞胡:特朗普不打伊朗了,沒提前告訴我

政知新媒體
2026-06-12 19:06:11
謝娜再次翻車,這一次,她踢到鐵板了

謝娜再次翻車,這一次,她踢到鐵板了

桌子的生活觀
2026-06-12 11:58:27
2026-06-13 02:35:00
MediaTea
MediaTea
專業的數字媒體、新媒體技術
1888文章數 80關注度
往期回顧 全部

科技要聞

剛剛,人類歷史上首位萬億美元富豪誕生!

頭條要聞

美加墨世界杯第二場比賽就現空座 英媒:尷尬

頭條要聞

美加墨世界杯第二場比賽就現空座 英媒:尷尬

體育要聞

歐洲恐韓?肉德維德?

娛樂要聞

一天4個瓜,肖戰熱巴最意外

財經要聞

萬億美元順差背后,透露這些信號

汽車要聞

標配激光雷達/雙動力可選 昊鉑S600限時售17.99萬起

態度原創

藝術
時尚
旅游
手機
軍事航空

藝術要聞

砸了640億,再賠160億!沙特“The Line”項目徹底涼了?

夏天別總穿一身白或一身黑!試試一半彩色、一半基礎色,高級亮眼

旅游要聞

印度有錢人真多酷暑辦理旅游簽證!不是有錢任性,是熱到活不下去

手機要聞

vivo X Fold6再預熱:天璣9500超能版+OriginOS 6 Fold

軍事要聞

伊朗媒體:已故最高領袖葬禮推遲舉行

無障礙瀏覽 進入關懷版