[Python][NumPy] N維數組類型 ndarray,形狀,資料結構,索引切片介紹

閱讀時間約 8 分鐘

NumPy 提供了一種 N 維數組類型 ndarray(N-dimensional array) 它描述了相同類型的「數據類型」的集合。


ndarray 形狀大小

多維數組: 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 數據類型

所有 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

可以在創建 NumPy 數組的過程中使用 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.int32np.float64np.complex128 作為 dtype 參數來指定數據的類型。你可以根據需要選擇適當的 dtype,它包括整數、浮點數、複數等不同的類型。

這種明確指定數據類型的方式可以確保數據被正確地儲存處理


ndarray 索引切片

在 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的行)的所有列。
  • 0 表示選擇的是第一行,而 : 表示選擇整個第一行的所有列。

[:, 1]

  • 這個切片表示選擇數組的所有行的第二列(索引為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 數組中的不同子集,進行查看、修改或進行進一步的計算。


NumPy 中的 ndarray 之所以能夠提供高效的速度。

基於以下幾個關鍵:

  1. 底層實現: NumPy 的底層實現是用 C 語言編寫的。比 Python 更接近硬體,執行會更高效。
  2. 連續的內存布局: NumPy 的數組在記憶體中是連續存儲的,這使得對數組的訪問和操作更加高效。例如(一維的 NumPy 數組 [1, 2, 3, 4, 5],這五個元素將按照順序依次存儲在記憶體中的相鄰位置,可以直接訪問數組中的每一個元素,而不需要額外的計算或跳躍)
  3. 廣播(Broadcasting): NumPy 支持廣播操作,允許在不同形狀的數組之間進行操作。
  4. 向量化操作: NumPy 支持向量化操作,即對整個數組執行操作而無需使用顯式循環(for迴圈)。這使得在數組上進行數學和邏輯運算更加簡單,同時也更快速,因為底層操作可以在 C底層進行。
  5. 使用原生數據類型: NumPy 使用原生數據類型,而不是 Python 中的對象。這意味著數組中的元素在內存中是連續存儲的,且數據類型是已知的。相比於 Python 對象,這減少了內存開銷運行時開銷
  6. 優化的算法: NumPy 中的許多操作都經過了高度優化,例如矩陣乘法、FFT(快速傅立葉變換)等。底層的優化算法使得這些操作在處理大規模數據時能夠更加高效

參考文獻


113會員
172Content count
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
NumPy在圖像處理、機器學習、數學和統計學等領域中被廣泛應用。 以下是一些常見的應用場景: 數據處理和分析: NumPy提供了高效的多維數組(nd array)和相應的操作函數,使得對大型數據集進行快速、有效的操作變得容易。
在程式開發中,協作合作專案時,利用type hint,可以快速知道函式輸入及輸出的資料型別,在後續的維護時也會更加方便及可讀。 Type hints 是Python 3.5 版本引入的功能,它允許在函數宣告中指定參數和傳回值的類型。Type hints 是一種可選的註解形式,不會影響程式碼的運行,
在現實生活中,充滿的警報及安全措施,總會設個安全線在那,若觸碰到底線時則會有警報響起。 在Python也有類似的作法,如果希望在某個條件達到時,就拉起警報不要讓程式繼續進行下去,就適合使用raise 這種機制讓開發者能夠在程序執行時檢測到不正確的條件,然後通過引發異常停止程序的執行或通知使用者。
在實務上,條碼槍傳送的資訊可能包含不可見字符或控制字符。這可能是因為條碼槍在傳送條碼數據時使用了一些特殊字符,這些字符在可見字符集合之外,例如 \x06 就是 ASCII 中的 "ACK" 控制字符。 本文將探討,如何查詢及處理這些特殊字符。
Python 提供了一系列內建函式,其中一部分涉及數學和數學操作。 以下是一些常用的內建函式和數學相關的函式: 基本數學運算: abs(x): 返回 x 的絕對值。 result = abs(-5) print(result) # 輸出: 5 max(iterable) 和 min(
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
NumPy在圖像處理、機器學習、數學和統計學等領域中被廣泛應用。 以下是一些常見的應用場景: 數據處理和分析: NumPy提供了高效的多維數組(nd array)和相應的操作函數,使得對大型數據集進行快速、有效的操作變得容易。
在程式開發中,協作合作專案時,利用type hint,可以快速知道函式輸入及輸出的資料型別,在後續的維護時也會更加方便及可讀。 Type hints 是Python 3.5 版本引入的功能,它允許在函數宣告中指定參數和傳回值的類型。Type hints 是一種可選的註解形式,不會影響程式碼的運行,
在現實生活中,充滿的警報及安全措施,總會設個安全線在那,若觸碰到底線時則會有警報響起。 在Python也有類似的作法,如果希望在某個條件達到時,就拉起警報不要讓程式繼續進行下去,就適合使用raise 這種機制讓開發者能夠在程序執行時檢測到不正確的條件,然後通過引發異常停止程序的執行或通知使用者。
在實務上,條碼槍傳送的資訊可能包含不可見字符或控制字符。這可能是因為條碼槍在傳送條碼數據時使用了一些特殊字符,這些字符在可見字符集合之外,例如 \x06 就是 ASCII 中的 "ACK" 控制字符。 本文將探討,如何查詢及處理這些特殊字符。
Python 提供了一系列內建函式,其中一部分涉及數學和數學操作。 以下是一些常用的內建函式和數學相關的函式: 基本數學運算: abs(x): 返回 x 的絕對值。 result = abs(-5) print(result) # 輸出: 5 max(iterable) 和 min(
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
我們在 【Python 軍火庫🧨 - websockets】傳送/接收音檔並轉換成numpy(基礎篇) 有聊到要如何透過Websocket來傳送音檔,但上一篇的作法是在Client端就進行音訊的解碼動作,這樣會有一個缺點,假設Client的機器運算效能較差,那麼運算的結果勢必會較慢出現,對於使用者
Thumbnail
關於Websockets的篇章, 有興趣的朋友歡迎參考: 【Python 軍火庫 - websockets】雙向溝通的渠道 【Python 軍火庫 - websockets】用json來溝通吧! 而這一篇章的主題主要是來分享如何透過websockets傳遞音檔並進行解碼, 我們都知道聲
Thumbnail
資料型態-變數概念 上面這張圖片傳傳達了三個概念, 常值:可以是數值、浮點數、字串、布林等資料, 變數名稱:這邊也很好理解,就是好記得名稱,這邊使用中文是方便初學者入門, 盒子:代表在Python底層運作的狀況,Python創建變數時,會先在記憶體創建型態物件,這邊是數字型態,所以創建數字物件。
Thumbnail
PyInstaller 是一個強大的工具,可以將 Python 程式碼打包成獨立的可執行檔案,讓你的程式可以在沒有 Python 解釋器的情況下運行。這對於分享和分發你的 Python 應用程式非常有用。以下是使用 PyInstaller 的基本步驟:
使用Python的Threading模組設計一個能夠在背景待命的程式,並在等待5秒後自動結束。我們將使用執行緒來執行背景任務,並使用定時等待來控制程式的結束時間。這種方法適用於不依賴於特定按鍵事件的情況,而是在固定的時間後自動退出程式。
Thumbnail
本篇將帶你學習 Python 的基本語法和資料型態。我們將從變數和資料型態開始,包括整數、浮點數、字串和布林值。接著,我們將探討輸入和輸出的方法,讓你能夠與使用者進行互動。最後,我們會介紹基本運算符和運算子,以進行數值計算。通過這些學習筆記,你將輕鬆掌握 Python 的基礎知識,讓我們開始吧!
Thumbnail
我們可以利用工作表的append()方法,在工作表的列尾添加資料列。 利用迴圈的技巧,我們可以批次賦予區塊內所有儲存格相同的值。 我們也可以在指定的列(行)之前插入指定數量的空白列(行),從指定的列(行)開始向下(右)刪除指定數量的列(行)。
Thumbnail
前言: 今天要講用python來做使用者介面,由於姆姆平常的工作面對是工廠產線生產,所以一般來說交付程式的時候會給(sample.py)或是(sample.pyc)這類的檔案格式,其中py和pyc檔簡單說,差別在一個看的到(py)原始碼一個看不到(pyc)。 TCL: 官方下載網址: PAGE:
Max和Maximum的差別為 np.max() 最少接收一個參數,回傳所有內容的最大值 結果 np.maximum(A, B) 最少接收兩個參數,回傳A與B逐個比較的最大值 結果
Thumbnail
一、什麼是變數?   變數是指用來代表某一種資料型態的符號,以非數字的符號來表達,可以是英文字母也可以是一個英文單字,不過python有一些英文字母不能被當作變數,我們稱作保留字,例如:False、None、True、and、is、not、or、......,之後會在介紹。
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
我們在 【Python 軍火庫🧨 - websockets】傳送/接收音檔並轉換成numpy(基礎篇) 有聊到要如何透過Websocket來傳送音檔,但上一篇的作法是在Client端就進行音訊的解碼動作,這樣會有一個缺點,假設Client的機器運算效能較差,那麼運算的結果勢必會較慢出現,對於使用者
Thumbnail
關於Websockets的篇章, 有興趣的朋友歡迎參考: 【Python 軍火庫 - websockets】雙向溝通的渠道 【Python 軍火庫 - websockets】用json來溝通吧! 而這一篇章的主題主要是來分享如何透過websockets傳遞音檔並進行解碼, 我們都知道聲
Thumbnail
資料型態-變數概念 上面這張圖片傳傳達了三個概念, 常值:可以是數值、浮點數、字串、布林等資料, 變數名稱:這邊也很好理解,就是好記得名稱,這邊使用中文是方便初學者入門, 盒子:代表在Python底層運作的狀況,Python創建變數時,會先在記憶體創建型態物件,這邊是數字型態,所以創建數字物件。
Thumbnail
PyInstaller 是一個強大的工具,可以將 Python 程式碼打包成獨立的可執行檔案,讓你的程式可以在沒有 Python 解釋器的情況下運行。這對於分享和分發你的 Python 應用程式非常有用。以下是使用 PyInstaller 的基本步驟:
使用Python的Threading模組設計一個能夠在背景待命的程式,並在等待5秒後自動結束。我們將使用執行緒來執行背景任務,並使用定時等待來控制程式的結束時間。這種方法適用於不依賴於特定按鍵事件的情況,而是在固定的時間後自動退出程式。
Thumbnail
本篇將帶你學習 Python 的基本語法和資料型態。我們將從變數和資料型態開始,包括整數、浮點數、字串和布林值。接著,我們將探討輸入和輸出的方法,讓你能夠與使用者進行互動。最後,我們會介紹基本運算符和運算子,以進行數值計算。通過這些學習筆記,你將輕鬆掌握 Python 的基礎知識,讓我們開始吧!
Thumbnail
我們可以利用工作表的append()方法,在工作表的列尾添加資料列。 利用迴圈的技巧,我們可以批次賦予區塊內所有儲存格相同的值。 我們也可以在指定的列(行)之前插入指定數量的空白列(行),從指定的列(行)開始向下(右)刪除指定數量的列(行)。
Thumbnail
前言: 今天要講用python來做使用者介面,由於姆姆平常的工作面對是工廠產線生產,所以一般來說交付程式的時候會給(sample.py)或是(sample.pyc)這類的檔案格式,其中py和pyc檔簡單說,差別在一個看的到(py)原始碼一個看不到(pyc)。 TCL: 官方下載網址: PAGE:
Max和Maximum的差別為 np.max() 最少接收一個參數,回傳所有內容的最大值 結果 np.maximum(A, B) 最少接收兩個參數,回傳A與B逐個比較的最大值 結果
Thumbnail
一、什麼是變數?   變數是指用來代表某一種資料型態的符號,以非數字的符號來表達,可以是英文字母也可以是一個英文單字,不過python有一些英文字母不能被當作變數,我們稱作保留字,例如:False、None、True、and、is、not、or、......,之後會在介紹。