首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python NumPy 庫安裝與基礎操作完整指南:陣列建立、索引切片、組合分割與統計函數

     編輯:更多程式設計知識

NumPy 是 Python 科學計算核心套件,提供高效能多維陣列物件 ndarray、向量化運算、線性代數、隨機數生成等功能。本文涵蓋安裝、IPython 互動環境、陣列核心操作、組合分割、屬性存取、檔案 IO 及常用統計函數,附完整 IPython 實戰紀錄可直接複製執行。

1. 安裝與環境建置


# 使用 pip 安裝(建議虛擬環境)
pip install numpy

# 安裝 IPython 互動式 shell(支援 Tab 補全、語法高亮)
pip install ipython

# 啟動 pylab 模式(自動匯入 numpy, matplotlib, scipy)
ipython --pylab

2. NumPy 陣列核心操作

2.1 陣列建立與基本屬性


In [1]: a = arange(5)           # 建立 0~4 一維陣列
In [2]: a.dtype                 # 資料型別
Out[2]: dtype('int64')

In [3]: a.shape                 # 維度形狀 (tuple)
Out[3]: (5,)

In [6]: m = array([[1, 2], [3, 4]])  # 巢狀列表建立二維陣列
In [7]: m
Out[7]: 
array([[1, 2],
       [3, 4]])

In [10]: m.shape
Out[10]: (2, 2)

In [14]: m[0, 0]                # 多維索引(逗號分隔)
Out[14]: 1
In [15]: m[0, 1]
Out[15]: 2

2.2 索引與切片(支援多維、步長、反轉、省略號)


In [16]: a[2:4]                 # 切片 [2, 3]
Out[16]: array([2, 3])

In [18]: a[2:5:2]               # 步長 2
Out[18]: array([2, 4])

In [19]: a[::-1]                # 反轉陣列
Out[19]: array([4, 3, 2, 1, 0])

In [20]: b = arange(24).reshape(2, 3, 4)  # 重塑為 2x3x4
In [21]: b.shape
Out[21]: (2, 3, 4)

In [22]: b
Out[22]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],
       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

In [23]: b[1, 2, 3]             # 取特定元素
Out[23]: 23

In [24]: b[:, 0, 0]             # 冒號忽略維度
Out[24]: array([ 0, 12])

In [24]: b[..., 0, 0]           # 省略號 ... 等同多個冒號
Out[24]: array([ 0, 12])

In [26]: b.ravel()              # 展平(回傳視圖,不複製記憶體)
Out[26]: array([ 0,  1, ..., 23])

In [27]: b.flatten()            # 展平(複製新記憶體)
Out[27]: array([ 0,  1, ..., 23])

In [30]: b.shape = (6, 4)       # 直接修改 shape 屬性
In [31]: b
Out[31]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       ...
       [20, 21, 22, 23]])

# 轉置
In [18]: b.T
Out[18]: 
array([[ 0,  4,  8, 12, 16, 20],
       [ 1,  5,  9, 13, 17, 21],
       [ 2,  6, 10, 14, 18, 22],
       [ 3,  7, 11, 15, 19, 23]])

2.3 陣列組合


In [1]: a = arange(9).reshape(3, 3)
In [2]: a
Out[2]: array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

In [3]: b = a * 2
In [4]: b
Out[4]: array([[ 0,  2,  4], [ 6,  8, 10], [12, 14, 16]])

In [5]: hstack((a, b))          # 水平堆疊 (axis=1)
Out[5]: array([[ 0, 1, 2,  0, 2, 4], ...])

In [6]: vstack((a, b))          # 垂直堆疊 (axis=0)
Out[6]: array([[ 0, 1, 2], ..., [12, 14, 16]])

In [7]: dstack((a, b))          # 深度堆疊 (axis=2)
Out[7]: array([[[ 0,  0], [ 1,  2], [ 2,  4]], ...])

2.4 陣列分割


In [9]: hsplit(a, 3)            # 水平分割成 3 等份
Out[9]: [array([[0],[3],[6]]), array([[1],[4],[7]]), array([[2],[5],[8]])]

In [10]: vsplit(a, 3)           # 垂直分割成 3 等份
Out[10]: [array([[0,1,2]]), array([[3,4,5]]), array([[6,7,8]])]

2.5 陣列屬性


In [12]: a.ndim                 # 維度數 (秩)
Out[12]: 2
In [13]: a.size                 # 元素總數
Out[13]: 9
In [14]: a.itemsize             # 單一元素位元組數
Out[14]: 8
In [15]: a.nbytes               # 總記憶體位元組數
Out[15]: 72
In [18]: a.T                    # 轉置
Out[18]: array([[0, 3, 6], [1, 4, 7], [2, 5, 8]])

2.6 型別轉換


In [19]: a.tolist()             # 轉為 Python 巢狀列表
Out[19]: [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

3. 常用統計與線性代數函數


In [22]: c = eye(2)             # 2x2 單位矩陣
In [23]: c
Out[23]: array([[1., 0.], [0., 1.]])

In [25]: savetxt("eye.txt", c)  # 存檔

# 載入 CSV 指定欄位
In [5]: c, v = loadtxt("test.csv", delimiter=",", usecols=(0,1), unpack=True)
In [12]: c
Out[12]: array([1., 4., 7.])

In [13]: mean(c)                # 平均值
Out[13]: 4.0
In [14]: np.max(c)              # 最大值
Out[14]: 7.0
In [15]: np.min(c)              # 最小值
Out[15]: 1.0
In [16]: np.ptp(c)              # 峰峰值 (max-min)
Out[16]: 6.0
In [18]: np.median(c)           # 中位數
Out[18]: 4.0
In [19]: np.var(c)              # 變異數
Out[19]: 6.0
In [20]: np.diff(c)             # 相鄰差分
Out[20]: array([3., 3.])
In [21]: np.std(c)              # 標準差
Out[21]: 2.449...
In [22]: np.where(c > 3)        # 條件索引
Out[22]: (array([1, 2]),)

4. 進階提示

  • 向量化運算:避免 Python 迴圈,直接對陣列運算(如 a * 2 + b)
  • 廣播機制:形狀相容的陣列自動對齊運算
  • 記憶體視圖:ravel()、切片、reshape() 多為視圖,修改會影響原陣列
  • 資料型別:指定 dtype 節省記憶體(如 float32, int16)
  • 隨機數:np.random 提供更豐富分布、向量化生成
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved