
- NumPy 教程
- NumPy - 首頁
- NumPy - 簡介
- NumPy - 環境
- NumPy 陣列
- NumPy - Ndarray 物件
- NumPy - 資料型別
- NumPy 建立和運算元組
- NumPy - 陣列建立例程
- NumPy - 陣列操作
- NumPy - 從現有資料建立陣列
- NumPy - 從數值範圍建立陣列
- NumPy - 遍歷陣列
- NumPy - 重塑陣列
- NumPy - 連線陣列
- NumPy - 堆疊陣列
- NumPy - 分割陣列
- NumPy - 展平陣列
- NumPy - 轉置陣列
- NumPy 索引和切片
- NumPy - 索引和切片
- NumPy - 高階索引
- NumPy 陣列屬性和操作
- NumPy - 陣列屬性
- NumPy - 陣列形狀
- NumPy - 陣列大小
- NumPy - 陣列步長
- NumPy - 陣列元素大小
- NumPy - 廣播
- NumPy - 算術運算
- NumPy - 陣列加法
- NumPy - 陣列減法
- NumPy - 陣列乘法
- NumPy - 陣列除法
- NumPy 高階陣列操作
- NumPy - 交換陣列的軸
- NumPy - 位元組交換
- NumPy - 副本和檢視
- NumPy - 元素級陣列比較
- NumPy - 過濾陣列
- NumPy - 連線陣列
- NumPy - 排序、搜尋和計數函式
- NumPy - 搜尋陣列
- NumPy - 陣列的並集
- NumPy - 查詢唯一行
- NumPy - 建立日期時間陣列
- NumPy - 二元運算子
- NumPy - 字串函式
- NumPy - 數學函式
- NumPy - 統計函式
- NumPy - 矩陣庫
- NumPy - 線性代數
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 繪製直方圖
- NumPy - NumPy 的 I/O 操作
- NumPy 排序和高階操作
- NumPy - 排序陣列
- NumPy - 沿軸排序
- NumPy - 使用花式索引排序
- NumPy - 結構化陣列
- NumPy - 建立結構化陣列
- NumPy - 操作結構化陣列
- NumPy - 欄位訪問
- NumPy - 記錄陣列
- Numpy - 載入陣列
- Numpy - 儲存陣列
- NumPy - 向陣列追加值
- NumPy - 交換陣列的列
- NumPy - 向陣列插入軸
- NumPy 處理缺失資料
- NumPy - 處理缺失資料
- NumPy - 識別缺失值
- NumPy - 刪除缺失資料
- NumPy - 填充缺失資料
- NumPy 效能最佳化
- NumPy - 使用陣列進行效能最佳化
- NumPy - 使用陣列進行向量化
- NumPy - 陣列的記憶體佈局
- Numpy 線性代數
- NumPy - 線性代數
- NumPy - 矩陣庫
- NumPy - 矩陣加法
- NumPy - 矩陣減法
- NumPy - 矩陣乘法
- NumPy - 元素級矩陣運算
- NumPy - 點積
- NumPy - 矩陣求逆
- NumPy - 行列式計算
- NumPy - 特徵值
- NumPy - 特徵向量
- NumPy - 奇異值分解
- NumPy - 求解線性方程組
- NumPy - 矩陣範數
- NumPy 元素級矩陣運算
- NumPy - 求和
- NumPy - 求平均值
- NumPy - 求中位數
- NumPy - 求最小值
- NumPy - 求最大值
- NumPy 集合運算
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 並集
- NumPy - 差集
- NumPy 有用資源
- NumPy 編譯器
- NumPy - 快速指南
- NumPy - 有用資源
- NumPy - 討論
NumPy - Ndarray 物件
NumPy ndarray
NumPy 中定義的最重要的物件是稱為ndarray的 N 維陣列型別。它描述了一個相同型別項的集合,可以使用基於零的索引訪問這些項。
ndarray 中的每個項在記憶體中佔用相同大小的塊,並由稱為dtype的資料型別物件表示。
從 ndarray 物件(透過切片)提取的任何項都由陣列標量型別之一的 Python 物件表示。
ndarray、dtype 和陣列標量型別之間的關係
下圖顯示了ndarray、資料型別物件dtype和陣列標量型別之間的關係:

建立 ndarray
可以使用不同的陣列建立例程構造 ndarray 類的例項。基本的 ndarray 使用 NumPy 中的array()函式建立。
numpy.array()函式從公開陣列介面的任何物件或從返回陣列的任何方法建立 ndarray。以下是語法:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
上述建構函式採用以下引數:
序號 | 引數和描述 |
---|---|
1 | object 任何公開陣列介面方法並返回陣列的物件,或任何(巢狀的)序列。 |
2 | dtype 所需的陣列資料型別,可選 |
3 | copy 可選。預設情況下(true),物件會被複制 |
4 | order C(行主序)或 F(列主序)或 A(任意)(預設) |
5 | subok 預設情況下,返回的陣列強制為基類陣列。如果為 true,則子類將被傳遞 |
6 | ndmin 指定結果陣列的最小維度 |
請檢視以下示例以更好地理解。
示例:建立一維陣列
在以下示例中,我們使用 NumPy 中的 array() 函式建立了一個一維陣列:
import numpy as np a = np.array([1, 2, 3]) print(a)
獲得的輸出如下:
[1, 2, 3]
示例:建立多維陣列
在這裡,我們使用 NumPy 中的 array() 函式建立了一個二維陣列:
import numpy as np a = np.array([[1, 2], [3, 4]]) print(a)
這將產生以下結果:
[[1 2] [3 4]]
示例:指定最小維度
現在,我們透過將“ndmin”作為引數傳遞給 array() 函式來指定結果陣列的最小維度:
import numpy as np a = np.array([1, 2, 3, 4, 5], ndmin=2) print(a)
以下是上述程式碼的輸出:
[[1 2 3 4 5]]
示例:指定資料型別
在下面的示例中,我們將 array() 函式中的“dtype”引數設定為 complex:
import numpy as np a = np.array([1, 2, 3], dtype=complex) print(a)
執行上述程式碼後,我們得到以下輸出:
[1.+0.j 2.+0.j 3.+0.j]
ndarray 的記憶體佈局
一個ndarray物件由一個連續的記憶體塊組成。這意味著陣列中的所有元素都儲存在記憶體的單個連續段中。這種連續的記憶體佈局允許輕鬆訪問和運算元組元素。
索引方案
索引方案將 ndarray 中的每個項對映到記憶體塊中的特定位置。ndarray 使用形狀和步長的組合來確定每個元素的位置。
形狀 - 陣列的形狀是一個整數元組,表示陣列沿每個維度的尺寸。例如,2x3 陣列的形狀為 (2, 3)。
步長 - 步長是在遍歷陣列時每個維度需要跳過的位元組數。步長決定如何在每個維度上從一個元素移動到下一個元素。
行主序和列主序
ndarray 中的元素可以以兩種主要順序儲存。它們是:
行主序(C 樣式) - 在行主序中,最後一個索引變化最快。這意味著同一行中的元素在記憶體中彼此相鄰儲存。NumPy 預設使用行主序。例如,在 2x3 陣列中:
[[1, 2, 3], [4, 5, 6]]
元素在記憶體中儲存為:1、2、3、4、5、6。
列主序(FORTRAN 樣式) - 在列主序中,第一個索引變化最快。這意味著同一列中的元素在記憶體中彼此相鄰儲存。例如,在 2x3 陣列中:
[[1, 2, 3], [4, 5, 6]]
元素在記憶體中儲存為:1、4、2、5、3、6。
示例
以下是一個基本示例,演示了記憶體佈局的使用:
import numpy as np # Creating a 2x3 array in row-major order a = np.array([[1, 2, 3], [4, 5, 6]]) print("Array:") print(a) print("Shape:", a.shape) print("Strides:", a.strides)
陣列的形狀為 (2, 3),表示它有 2 行 3 列。步長為 (24, 8),這意味著要移動到下一行,我們需要跳過 24 個位元組(因為每個元素都是一個 8 位元組整數,並且有 3 列),要移動到下一列,我們需要跳過 8 個位元組(一個整數的大小),如以下輸出所示:
Array: [[1 2 3] [4 5 6]] Shape: (2, 3) Strides: (24, 8)