NumPy 提供了一種 N 維數組類型 ndarray(N-dimensional array) ,它描述了相同類型的「數據類型」的集合。
多維數組: ndarray
是一個 N 維數組,其中 N 可以是任意整數。一維數組是向量,二維數組是矩陣,以此類推
shape
利用shape
屬性查看,ndarray
在形狀描述了數組在每個維度上的大小。例如,形狀為 (2, 3) 的數組表示一個二維數組,其中維度為 2,每行的資料長度為3。
import numpy as np
# 創建一個一維數組
arr1 = np.array([1, 2, 3, 4, 5])
# 創建一個二維數組
arr2 = np.array([[1, 2, 3],
[4, 5, 6]])
print("arr1.shape:", arr1.shape) # 輸出: (5,)
print("arr2.shape:", arr2.shape) # 輸出: (2, 3)
所有 ndarray
中的元素都需要具有相同的數據類型。這有助於提高數組的效率,因為 NumPy 可以針對特定數據類型進行優化
ndarray
中的元素具有特定的數據類型,如整數、浮點數、複數等。可以使用 dtype
屬性查看或設置數據類型。
dtype
使用 dtype
屬性查看, ndarray
的資料型態。
import numpy as np
# 創建一個ndarray
arr = np.array([1, 2, 3, 4, 5])
# 創建一個包含整數和浮點數的ndarray
arr_mixed = np.array([1, 2.5, 3, 4.2, 5])
# 查看ndarray的資料型態
print("arr資料型態:", arr.dtype) #輸出 arr資料型態: int32
print("arr_mixed資料型態:", arr_mixed.dtype) #輸出 arr_mixed資料型態: float64
dtype
參數,明確指定數據類型import numpy as np
# 使用 dtype 參數創建一個整數數組
arr_int = np.array([1, 2, 3, 4, 5], dtype=np.int32)
# 使用 dtype 參數創建一個浮點數數組
arr_float = np.array([1.1, 2.2, 3.3, 4.4, 5.5], dtype=np.float64)
# 使用 dtype 參數創建一個複數數組
arr_complex = np.array([1 + 2j, 3 + 4j, 5 + 6j], dtype=np.complex128)
# 查看數組的資料型態
print("整數數組的資料型態:", arr_int.dtype) #輸出 整數數組的資料型態: int32
print("浮點數數組的資料型態:", arr_float.dtype) #輸出 浮點數數組的資料型態: float64
print("複數數組的資料型態:", arr_complex.dtype) #輸出 複數數組的資料型態: complex128
分別使用 np.int32
、np.float64
和 np.complex128
作為 dtype
參數來指定數據的類型。你可以根據需要選擇適當的 dtype
,它包括整數、浮點數、複數等不同的類型。
這種明確指定數據類型的方式可以確保數據被正確地儲存和處理
在 NumPy 中,你可以使用索引和切片操作來訪問和修改 ndarray
中的元素。
以下是一些基本的索引和切片操作:
一維數組:
索引的元素編號是從0開始。
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
# 獲取第三個元素
print(arr[2]) # 輸出: 3
# 修改第一個元素
arr[0] = 10
print(arr) #輸出 [10 2 3 4 5]
多維數組:
import numpy as np
arr_2d = np.array([[1, 2, 3],
[4, 5, 6]])
# 獲取第一行第二列的元素
print(arr_2d[0, 1]) # 輸出: 2
# 修改第二行第三列的元素
arr_2d[1, 2] = 99
print(arr_2d)
#輸出
# [[ 1 2 3]
# [ 4 5 99]]
索引和切片操作在 NumPy 中是零起始的,這意味著第一個元素的索引是0
一維數組:
[:3]
表示選擇索引 0 到 2(不包括索引 3)的所有元素。
[-2:]
表示選擇倒數第二個元素到最後一個元素的所有元素。
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
# 獲取前三個元素
print(arr[:3]) # 輸出: [1, 2, 3]
# 修改後兩個元素
arr[-2:] = 0
print(arr) #輸出 [1 2 3 0 0]
二維數組:
[0, :]
:
0
表示選擇的是第一行,而 :
表示選擇整個第一行的所有列。[:, 1]
:
:
表示選擇整個所有行,而 1
表示選擇第二列。[1:, 1:]
:
1:
表示選擇從索引1(第二行)開始的所有行,而 1:
表示選擇從索引1(第二列)開始的所有列。import numpy as np
# 創建一個二維數組
arr_2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 獲取第一行
first_row = arr_2d[0, :]
print("第一行:", first_row) # 輸出: [1, 2, 3]
# 獲取第二列
second_column = arr_2d[:, 1]
print("第二列:", second_column) # 輸出: [2, 5, 8]
# 使用切片獲取子矩陣
submatrix = arr_2d[1:, 1:]
print("子矩陣:")
print(submatrix)
# 輸出:
# [[5, 6],
# [8, 9]]
# 修改切片中的元素
arr_2d[1:, 1:] = 0
print("修改後的數組:")
print(arr_2d)
# 輸出:
# [[1, 2, 3],
# [4, 0, 0],
# [7, 0, 0]]
這些切片操作讓你能夠靈活地選擇 NumPy 數組中的不同子集,進行查看、修改或進行進一步的計算。
ndarray
之所以能夠提供高效的速度。[1, 2, 3, 4, 5]
,這五個元素將按照順序依次存儲在記憶體中的相鄰位置,可以直接訪問數組中的每一個元素,而不需要額外的計算或跳躍)