
- 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 - 陣列屬性
NumPy 陣列屬性
在 NumPy 中,屬性是陣列物件的特性,提供關於陣列及其資料的重要的資訊。這些屬性用於訪問關於陣列結構和配置的各種細節,而不會修改它們。
在本章中,我們將討論 NumPy 的各種陣列屬性。
NumPy 形狀屬性
NumPy 的shape屬性提供陣列的維度。它返回一個元組,表示陣列沿每個維度的尺寸。它也可以用於調整陣列大小。
示例 1
在下面的示例中,我們使用 shape 屬性檢索 NumPy 陣列的形狀:
import numpy as np a = np.array([[1,2,3],[4,5,6]]) print (a.shape)
獲得的輸出如下:
(2, 3)
示例 2
在這裡,我們使用 NumPy 中的 shape 屬性調整陣列大小:
import numpy as np a = np.array([[1,2,3],[4,5,6]]) a.shape = (3,2) print (a)
這將產生以下結果:
[[1, 2] [3, 4] [5, 6]]
示例 3
NumPy 還提供了一個 reshape() 函式來調整陣列大小:
import numpy as np a = np.array([[1,2,3],[4,5,6]]) b = a.reshape(3,2) print (b)
以上程式碼的輸出如下:
[[1, 2] [3, 4] [5, 6]]
NumPy 維度屬性
ndim屬性返回陣列的維度(軸)數。
在 NumPy 中,陣列的維度稱為它的秩。NumPy 陣列中的每個軸對應一個維度。軸(維度)的數量稱為陣列的秩。
陣列可以是任何維度,從一維(1D)陣列(也稱為向量)到多維陣列,如二維(2D)陣列(矩陣)甚至更高維度的陣列。
示例 1
在這個例子中,我們使用 arange() 函式建立一個 NumPy 陣列 a,其中包含從“0”到“23”的“24”個均勻間隔的整數:
import numpy as np a = np.arange(24) print (a)
獲得的輸出如下所示:
[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
示例 2
這裡,我們使用 arange() 函式建立一個包含“24”個元素的一維 NumPy 陣列 a,然後將其重塑為形狀如提供的三維陣列“b”,從而得到一個 3D 陣列:
# This is one dimensional array import numpy as np a = np.arange(24) a.ndim # Now reshape it b = a.reshape(2,4,3) print (b) # b is having three dimensions
執行上述程式碼後,我們得到以下輸出:
[[[ 0, 1, 2] [ 3, 4, 5] [ 6, 7, 8] [ 9, 10, 11]] [[12, 13, 14] [15, 16, 17] [18, 19, 20] [21, 22, 23]]]
NumPy 大小屬性
size屬性返回陣列中元素的總數。在 NumPy 中,陣列的大小是指陣列中包含的元素總數。
- 對於一維陣列,大小隻是元素的數量。
- 對於二維陣列,大小是行數和列數的乘積。
- 對於三維陣列,大小是所有三個維度大小的乘積。
示例
在下面的示例中,我們使用 NumPy 中的“size”屬性來檢索 3D 陣列的大小:
import numpy as np # Creating a 3D array array_3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) print("3D Array:\n", array_3d) print("Size of the array:", array_3d.size)
獲得的輸出如下:
3D Array: [[[ 1 2 3] [ 4 5 6]] [[ 7 8 9] [10 11 12]]] Size of the array: 12
NumPy 資料型別屬性
dtype屬性描述陣列中元素的資料型別。在 NumPy 中,陣列的資料型別是指儲存在陣列中的元素的型別。
NumPy 支援各種資料型別,包括整數、浮點數、複數、布林值等等。每種資料型別都由一個dtype物件表示。“dtype”不僅指定資料的型別,還指定其大小和位元組序。
示例
在這個例子中,我們在建立 NumPy 陣列時使用“dtype”屬性指定其資料型別:
import numpy as np # Creating an array of integers int_array = np.array([1, 2, 3], dtype=np.int32) print("Integer Array:", int_array) print("Data type of int_array:", int_array.dtype) # Creating an array of floats float_array = np.array([1.1, 2.2, 3.3], dtype=np.float64) print("Float Array:", float_array) print("Data type of float_array:", float_array.dtype) # Creating an array of complex numbers complex_array = np.array([1 + 2j, 3 + 4j], dtype=np.complex128) print("Complex Array:", complex_array) print("Data type of complex_array:", complex_array.dtype)
這將產生以下結果:
Integer Array: [1 2 3] Data type of int_array: int32 Float Array: [1.1 2.2 3.3] Data type of float_array: float64 Complex Array: [1.+2.j 3.+4.j] Data type of complex_array: complex128
NumPy 元素大小屬性
itemsize屬性返回陣列中每個元素的長度(以位元組為單位)。
元素大小由陣列的資料型別 (dtype) 決定。不同的資料型別需要不同的記憶體量。例如,int32型別每個元素需要“4”個位元組,而float64型別每個元素需要“8”個位元組。
示例 1
在下面的示例中,我們檢查整數資料型別“int8”陣列的元素大小:
# dtype of array is int8 (1 byte) import numpy as np x = np.array([1,2,3,4,5], dtype = np.int8) print (x.itemsize)
我們得到如下所示的輸出:
1
示例 2
現在,我們檢查浮點資料型別“float32”陣列的元素大小:
# dtype of array is now float32 (4 bytes) import numpy as np x = np.array([1,2,3,4,5], dtype = np.float32) print (x.itemsize)
產生的結果如下:
4
NumPy 緩衝區資訊屬性
nbytes屬性返回陣列元素總共佔用的位元組數。
在 NumPy 中,陣列的緩衝區資訊提供了關於儲存陣列資料的底層記憶體結構的詳細資訊。這包括關於記憶體佈局、資料型別和緩衝區內位元組偏移量的資訊。
示例
在這個例子中,我們使用“nbytes”屬性來檢索陣列資料緩衝區使用的總記憶體:
import numpy as np # Creating an array array = np.array([1, 2, 3, 4, 5], dtype=np.int32) # Checking total memory size of the array print("Total memory size of the array:", array.nbytes, "bytes")
獲得的輸出如下所示:
Total memory size of the array: 20 bytes
NumPy 步長屬性
strides屬性提供遍歷陣列時每個維度需要步進的位元組數。
步長指定在記憶體中必須跳過的位元組數,以便沿每個軸從一個元素移動到下一個元素。它們有助於確定陣列如何在記憶體中佈局以及如何訪問元素。
示例
在下面的示例中,我們使用“strides”屬性訪問二維陣列中的元素來計算記憶體地址:
import numpy as np # Creating a 2D array array = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) # Checking the strides print("Array shape:", array.shape) print("Array strides:", array.strides)
第一個軸(行)的步長為 16 個位元組,這意味著要從一行移動到下一行,NumPy 在記憶體中跳過 16 個位元組。第二個軸(列)的步長為 4 個位元組,表示要在同一行內從一列移動到下一列,NumPy 跳過 4 個位元組:
Array shape: (3, 4) Array strides: (32, 8)
NumPy 標誌屬性
flags屬性返回有關陣列記憶體佈局的資訊,例如它是否在記憶體中連續。
NumPy 提供了幾個標誌來描述陣列記憶體佈局和屬性的不同方面:
序號 | 屬性和描述 |
---|---|
1 | C_CONTIGUOUS (C) 資料位於單個、C 風格的連續段中 |
2 | F_CONTIGUOUS (F) 資料位於單個、Fortran 風格的連續段中 |
3 | OWNDATA (O) 陣列擁有它使用的記憶體,或者從另一個物件借用記憶體 |
4 | WRITEABLE (W) 資料區域可以寫入。將其設定為 False 會鎖定資料,使其成為只讀的 |
5 | ALIGNED (A) 資料和所有元素都針對硬體進行了適當的對齊 |
6 | UPDATEIFCOPY (U) 此陣列是其他一些陣列的副本。當此陣列被釋放時,基礎陣列將使用此陣列的內容進行更新 |
示例
以下示例顯示陣列標誌的當前值:
import numpy as np x = np.array([1,2,3,4,5]) print (x.flags)
獲得的輸出如下:
C_CONTIGUOUS : True F_CONTIGUOUS : True OWNDATA : True WRITEABLE : True ALIGNED : True UPDATEIFCOPY : False
NumPy 基礎屬性
如果陣列是另一個數組的檢視,則base屬性返回基礎物件。如果陣列擁有其資料,則 base 為“None”。在 NumPy 中,“陣列基礎”的概念是指從中派生新陣列的原始陣列。
示例
在這個例子中,“view_array”是“original_array”的檢視,而“view_array”的 base 屬性指向“original_array”:
import numpy as np # Creating an array original_array = np.array([[1, 2, 3], [4, 5, 6]]) # Creating a view (a slice) of the original array view_array = original_array[0:1, :] # Checking the base of the view print("Base array of view_array:", view_array.base)
產生的結果如下:
Base array of view_array: [[1 2 3] [4 5 6]]
NumPy 實部和虛部屬性
對於包含複數的陣列,real和imag屬性分別返回實部和虛部。
示例
在這個例子中,我們使用“real”屬性返回一個包含實部的陣列,並使用“imag”屬性返回一個包含虛部的陣列:
import numpy as np # Creating an array of complex numbers complex_array = np.array([1+2j, 3+4j, 5+6j]) # Accessing the real part real_part = complex_array.real print("Real part:", real_part) # Accessing the imaginary part imaginary_part = complex_array.imag print("Imaginary part:", imaginary_part)
我們得到如下所示的輸出:
Real part: [1. 3. 5.] Imaginary part: [2. 4. 6.]