iPAS AI 應用規劃師 中級 科目三 機器學習技術與應用

np.dot(v1, v2) 結果是多少?NumPy 向量矩陣運算識別

原題 40

依據附圖程式碼進行資料處理,下列何者正確?

import numpy as np

v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])
A = np.array([[1, 2], [3, 4]])

白話

程式碼定義了兩個向量 v1=[1,2,3]、v2=[4,5,6],和一個 2×2 矩陣 A=[[1,2],[3,4]]。題目問這四個操作哪一個描述正確:linalg.inv 算什麼、v1 * v2 是什麼、np.dot(v1,v2) 的結果、linalg.eig 算什麼。

問你:哪一個描述正確說出了該 NumPy 函數的功能或計算結果?

點選你的答案。

01 總結

一句話總結

np.dot(v1, v2) 計算兩個向量的內積:1×4 + 2×5 + 3×6 = 4 + 10 + 18 = 32,返回純量 np.int64(32),這是選項 C 正確描述的結果。

02 情境

先感受問題:四個 NumPy 函數,哪個描述配哪個?

「資料創智」的初級工程師陳亦宏在學 NumPy,遇到了一批考題。他需要把四個 NumPy 函數的名稱和它們的功能配對起來:

np.linalg.inv(A) → 算什麼?
v1 * v2 → 是元素相乘還是內積?
np.dot(v1, v2) → 算什麼?結果是多少?
np.linalg.eig(A) → 算什麼?

這四個函數在 ML 裡都很常見:線性代數(矩陣反矩陣、特徵值)和向量運算(點積)是神經網路、PCA、線性迴歸的數學基礎。

選項 C 說 np.dot(v1, v2) = np.int64(32),需要確認這個計算是否正確。

03 對照

四個 NumPy 操作各自做什麼?

  1. np.linalg.inv(A):計算矩陣 A 的「反矩陣(Inverse Matrix)」,不是行列式。滿足 A × inv(A) = 單位矩陣 I。行列式要用 np.linalg.det(A) 計算。inv 和 det 是完全不同的東西:inv 返回一個矩陣,det 返回一個純量。
  2. v1 * v2(星號乘法):在 NumPy 中,* 對陣列做「元素對元素(element-wise)」的乘法,結果是 [1×4, 2×5, 3×6] = [4, 10, 18],不是 [5, 7, 9]。[5, 7, 9] 是加法(v1 + v2)的結果,不是乘法。
  3. np.dot(v1, v2):計算「內積(Dot Product)」,是對應元素相乘後加總:1×4 + 2×5 + 3×6 = 4 + 10 + 18 = 32。返回一個純量(不是陣列),資料型別是 np.int64。
  4. np.linalg.eig(A):計算矩陣 A 的「特徵值和特徵向量(Eigenvalues and Eigenvectors)」,不是反矩陣。返回 (eigenvalues, eigenvectors),是 PCA 和主成分分析的核心計算。
  5. 混淆 inv / det / eig 的根本原因:三個函數都在 np.linalg 子模組下,縮寫接近(inv、det、eig),考試容易把功能互換。記法:inv = inverse(反矩陣,矩陣輸出);det = determinant(行列式,純量輸出);eig = eigenvectors(特徵值向量,tuple 輸出)。
04 解法

驗算 np.dot(v1, v2) = 32

陳亦宏逐步計算 np.dot(v1, v2):

v1 = [1, 2, 3]
v2 = [4, 5, 6]

np.dot(v1, v2) = v1[0]×v2[0] + v1[1]×v2[1] + v1[2]×v2[2]
= 1×4 + 2×5 + 3×6
= 4 + 10 + 18
= 32

返回類型:np.int64(32)(因為 v1 和 v2 的元素都是整數,點積也是整數)

選項 C 完整且正確地描述了 np.dot 的計算結果。

這就是選項 C 講的:np.dot(v1, v2) 結果為 np.int64(32)

技術版:NumPy 核心線性代數函數總覽與向量運算規則

中級考試大概率會考程式碼跟公式,所以這部分你還是要學。但如果現在學起來很痛苦,可以先跳過,等讀完其他題目回頭再來。

Step 1 純故事版

想像向量是「有方向的箭頭」。v1 = [1,2,3] 是一個在 3D 空間中的箭頭,v2 = [4,5,6] 是另一個。np.dot(v1, v2) = 32 代表這兩個箭頭「指向相似方向的程度」(投影)。如果兩個向量垂直,點積 = 0;同向時點積最大。這個操作是餘弦相似度計算的基礎,也是神經網路每一層加權計算的核心數學。

Step 2 NumPy 函數對照表
函數功能本題結果
v1 * v2元素對元素乘法array([4, 10, 18])
v1 + v2元素對元素加法array([5, 7, 9])
np.dot(v1, v2)向量內積(點積)np.int64(32)
np.linalg.inv(A)反矩陣array([[-2., 1.], [1.5, -0.5]])
np.linalg.det(A)行列式-2.0
np.linalg.eig(A)特徵值和特徵向量(array([-0.37, 5.37]), vectors)
Step 3 符號角色表
Dot Product(內積)
兩個向量對應元素相乘後加總,結果是純量,公式:v1·v2 = Σ v1[i] × v2[i]
Element-wise(元素對元素)
對兩個陣列對應位置的元素各自做操作,結果仍是陣列
Inverse Matrix(反矩陣)
滿足 A × A⁻¹ = I 的矩陣,np.linalg.inv 計算
Determinant(行列式)
方陣的一個純量,np.linalg.det 計算,反矩陣存在的條件是行列式不為 0
Eigenvalue(特徵值)
滿足 Av = λv 的純量 λ,np.linalg.eig 計算
Step 4 完整計算驗算
v1 = [1, 2, 3], v2 = [4, 5, 6]

v1 * v2 (element-wise):
  [1×4, 2×5, 3×6] = [4, 10, 18]  ← 不是 [5,7,9]

np.dot(v1, v2) (dot product):
  1×4 + 2×5 + 3×6 = 4 + 10 + 18 = 32  ← 正確

A = [[1, 2], [3, 4]]

np.linalg.det(A):
  1×4 - 2×3 = 4 - 6 = -2.0

np.linalg.inv(A):
  (1/det) × [[4, -2], [-3, 1]]
  = (1/-2) × [[4, -2], [-3, 1]]
  = [[-2, 1], [1.5, -0.5]]  ← 不是行列式

np.linalg.eig(A):
  特徵值 λ 滿足 det(A - λI) = 0
  (1-λ)(4-λ) - 6 = 0
  λ² - 5λ - 2 = 0
  λ ≈ -0.37 或 5.37  ← 特徵值,不是反矩陣
Step 5 自我複述
  1. np.dot(v1, v2) 和 v1 * v2 的差別是什麼?各返回什麼類型?
  2. np.linalg.inv(A) 和 np.linalg.det(A) 各返回什麼?兩者的關係是什麼?
  3. 如果矩陣 A 的行列式為 0,np.linalg.inv(A) 會發生什麼?
  4. np.linalg.eig(A) 返回什麼?如何提取特徵值和特徵向量?
  5. 兩個向量的點積等於 0 代表什麼幾何意義?
05 陷阱

為什麼其他選項是錯的

選項 A np.linalg.inv 計算行列式

字面在說什麼:np.linalg.inv(A) 計算矩陣 A 的行列式。

為什麼不對:inv 是 inverse(反矩陣),不是 determinant(行列式)。計算行列式要用 np.linalg.det(A)。反矩陣返回一個和 A 同形狀的矩陣(本題是 2×2),行列式返回一個純量。兩者是完全不同的線性代數操作,雖然都和「可逆性」有關(行列式不為 0 才有反矩陣),但計算方法和結果形式完全不同。

誰會選錯:把 inv(反矩陣)和 determinant(行列式)的名稱混淆,或記不住各函數縮寫含義的人。

選項 B v1 * v2 = [5, 7, 9]

字面在說什麼:v1 和 v2 用星號相乘的結果是 [5, 7, 9]。

為什麼不對:[5, 7, 9] 是 v1 + v2 的結果(1+4=5, 2+5=7, 3+6=9),不是 v1 * v2。v1 * v2 在 NumPy 中是 element-wise 乘法:[1×4, 2×5, 3×6] = [4, 10, 18]。這是「加法和乘法」的基礎混淆,是考試中最常見的計算失誤。

誰會選錯:不熟悉 NumPy 的 element-wise 乘法語義,直覺上把 * 操作的結果當加法算的人。

選項 D np.linalg.eig 計算反矩陣

字面在說什麼:np.linalg.eig(A) 計算矩陣 A 的反矩陣。

為什麼不對:eig 是 eigenvector/eigenvalue(特徵值/特徵向量),不是 inverse(反矩陣)。np.linalg.eig(A) 返回一個包含兩個元素的 tuple:(特徵值陣列, 特徵向量矩陣)。反矩陣要用 np.linalg.inv(A)。eig 和 inv 的縮寫非常不同,但考試中容易因為「都在 linalg 下」而混淆。

誰會選錯:沒有記住 NumPy linalg 子模組各函數縮寫含義,在 inv、det、eig 三個函數之間混淆的人。

06 變形

同個考點下次怎麼變形

變形 1 邊界

直覺:如果 v1 和 v2 都是浮點數,np.dot(v1, v2) 的返回類型會改變嗎?

答案:會改變。v1 = np.array([1.0, 2.0, 3.0]),v2 = np.array([4.0, 5.0, 6.0]),np.dot(v1, v2) = np.float64(32.0)。NumPy 根據輸入的資料型別決定輸出類型,整數輸入 → int64,浮點數輸入 → float64。考試有時會考類型敏感的題目,要注意。

變形 2 反例

直覺:np.dot(A, v1) 當 A 是 2×2 矩陣、v1 是長度 3 的向量,會發生什麼?

答案:會報錯(ValueError: shapes (2,2) and (3,) not aligned)。矩陣-向量乘法要求矩陣的列數等於向量的長度:A(m×n) × v(n) = result(m)。A 是 2×2,v1 是長度 3,維度不匹配。本題的 v1、v2 都是長度 3,所以點積可以計算;A 是 2×2,若要和向量相乘需要長度 2 的向量。

變形 3 升級版

直覺:np.dot 用在兩個矩陣上(矩陣乘法)和用在兩個向量上(點積),有什麼差異?

答案:np.dot(v1, v2) 對兩個一維向量計算內積,返回純量。np.dot(A, B) 對兩個二維矩陣計算矩陣乘法,返回矩陣,要求 A 的列數等於 B 的行數。Python 3.5 之後可用 @ 運算符做矩陣乘法(A @ B),更清楚。np.dot 和 @ 在矩陣乘法上結果相同,但 np.dot 在多維陣列的行為較複雜,現代 NumPy 程式碼偏好用 @。

變形 4 跨領域

直覺:np.dot(v1, v2) = 32 在機器學習中有什麼實際意義?

答案:點積是多個 ML 操作的基礎:(1)神經網路的全連接層:每個神經元的輸出 = np.dot(weights, input) + bias;(2)餘弦相似度:cos(θ) = dot(v1, v2) / (||v1|| × ||v2||),本題 dot=32,||v1||=√14,||v2||=√77,相似度約 0.974;(3)線性迴歸:預測值 = np.dot(X, w) + b;(4)注意力機制:Query × Key 的點積。

變形 5 評估指標

直覺:np.linalg.inv(A) 在 ML 中什麼時候會用到?

答案:線性迴歸的解析解:w = (XᵀX)⁻¹ × Xᵀy,直接用反矩陣求最優權重(不需要梯度下降)。這在資料量小的時候很有效,但 XᵀX 是 p×p 的矩陣(p 是特徵數),計算反矩陣的複雜度是 O(p³),特徵數很多時就很慢,這是大型 ML 問題通常改用梯度下降的原因。

07 延伸

想再往下看,這 5 個

出處

iPAS 經濟部產業人才能力鑑定 ・ 114 年第二梯次 iPAS AI 應用規劃師 中級 科目三 機器學習技術與應用 第 40 題

查看官方原文 PDF