
- 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 中從現有資料建立陣列
您可以透過使用 Python 中已存在的資料結構初始化 NumPy 陣列,或者將其轉換為與 NumPy 相容的格式來從現有資料建立 NumPy 陣列。以下是實現此目的的一些常見方法:
- 使用 numpy.asarray() 函式
- 使用 numpy.frombuffer() 函式
- 使用 numpy.fromiter() 函式
- 從 Python 列表
- 從巢狀列表
- 從 Python 元組
- 從現有的 NumPy 陣列
- 使用範圍物件
NumPy 快速執行復雜陣列運算的能力在資料處理和科學計算等領域非常重要。
使用 numpy.asarray() 函式
numpy.asarray() 函式用於將各種 Python 物件轉換為 NumPy 陣列。這些物件包括 Python 列表、元組、其他陣列,甚至標量值。
此函式確保結果始終為 NumPy 陣列,從而方便資料操作和數值計算。以下是語法:
numpy.asarray(a, dtype=None, order=None)
其中,
a - 它是要轉換的資料,可以是列表、元組、陣列或任何可以轉換為陣列的物件。
dtype(可選) - 陣列所需的資料型別。如果未指定,NumPy 會根據輸入確定資料型別。
order(可選) - 指定是以行優先(C)還是列優先(F)順序儲存陣列。預設為 None,這意味著 NumPy 根據輸入決定。
示例:將 Python 列表轉換為 NumPy 陣列
在以下示例中,我們使用 numpy.asarray() 函式將 Python 列表轉換為 NumPy 陣列:
import numpy as np # Convert list to array my_list = [1, 2, 3, 4, 5] arr_from_list = np.asarray(my_list) print("Array from list:",arr_from_list)
獲得的輸出如下:
Array from list: [1 2 3 4 5]
示例:保留資料型別
在這裡,我們將包含不同資料型別(int、float、bool、str)元素的 Python 列表轉換為 NumPy 陣列,使用 numpy.asarray() 函式:
import numpy as np # Convert list with different data types to array my_mixed_list = [1, 2.5, True, 'hello'] arr_from_mixed = np.asarray(my_mixed_list) print("Array from mixed list:", arr_from_mixed)
這將產生以下結果:
Array from mixed list: ['1' '2.5' 'True' 'hello']
使用 numpy.frombuffer() 函式
numpy.frombuffer() 函式從緩衝區物件(例如位元組物件或位元組陣列)建立陣列。這在處理原始二進位制資料或記憶體緩衝區時非常有用。
此函式將緩衝區物件解釋為一維陣列資料。它允許您指定結果陣列中元素的資料型別。以下是語法:
numpy.frombuffer(buffer, dtype=float, count=-1, offset=0)
其中,
buffer - 包含要解釋為陣列的資料的緩衝區物件。
dtype(可選) - 結果陣列中元素所需的資料型別。預設為 float。
count(可選) - 從緩衝區讀取的專案數。預設為 -1,表示讀取所有資料。
offset(可選) - 開始讀取資料的緩衝區內的起始位置。預設為 0。
示例
在此示例中,我們使用 numpy.frombuffer() 函式將位元組物件 "my_bytes" 解釋為位元組的一維陣列:
import numpy as np # Create bytes object my_bytes = b'hello world' # Create array from bytes object arr_from_bytes = np.frombuffer(my_bytes, dtype='S1') print("Array from bytes object:",arr_from_bytes)
生成的 NumPy 陣列包含原始位元組物件 'hello world' 的每個位元組:
Array from bytes object: [b'h' b'e' b'l' b'l' b'o' b' ' b'w' b'o' b'r' b'l' b'd']
使用 numpy.fromiter() 函式
numpy.fromiter() 函式從可迭代物件建立一個新的一個維度陣列。它迭代可迭代物件,將每個元素轉換為陣列元素。以下是語法:
numpy.fromiter(iterable, dtype, count=-1)
其中,
iterable - 依次產生元素的可迭代物件。
dtype - 結果陣列中元素的資料型別。
count(可選) - 從可迭代物件讀取的專案數。預設為 -1,表示讀取所有專案。
示例
在下面的示例中,我們使用 numpy.fromiter() 函式從生成器 "my_generator" 建立一個 NumPy 陣列 "gen_array",該生成器產生從 0 到 4 的數字:
import numpy as np # Generator function that yields numbers def my_generator(n): for i in range(n): yield i # Create array from generator gen_array = np.fromiter(my_generator(5), dtype=int) print("Array from generator:",gen_array)
在生成的陣列中,每個元素對應於生成器函式產生的轉換為整數的值:
Array from generator: [0 1 2 3 4]
Python 中的生成器是逐個生成一系列值的函式。NumPy 提供 np.fromiter() 函式來從生成器建立陣列。
從 Python 列表
建立 NumPy 陣列最常見的方法之一是轉換 Python 列表。此方法提供 numpy.array() 函式或 numpy.asarray() 函式來轉換列表(Python 中常用的資料結構)為 NumPy 陣列。
以下是語法:
numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
其中,
object - 輸入資料,在本例中為 Python 列表。
dtype(可選) - 陣列所需的資料型別。如果未指定,NumPy 會從輸入資料中解釋資料型別。
copy(可選) - 如果為 True,則確保建立輸入資料的副本。如果為 False,則在可能的情況下避免不必要的複製。
order(可選) - 指定陣列的記憶體佈局順序。'C' 表示行優先(C 樣式),'F' 表示列優先(Fortran 樣式),'K' 表示輸入陣列的佈局(預設值)。
subok(可選) - 如果為 True,則子類將被傳遞;否則,返回的陣列將強制為基類陣列。
ndmin(可選) - 指定結果陣列應具有的最小維度數。
示例
在下面的示例中,我們使用 numpy.array() 函式將包含整數的 Python 列表 "my_list" 轉換為 NumPy 陣列:
import numpy as np # Convert list to array my_list = [1, 2, 3, 4, 5] arr_from_list = np.array(my_list) print("Array from list:",arr_from_list)
執行上述程式碼後,我們將獲得以下輸出:
Array from list: [1 2 3 4 5]
從巢狀列表
Python 中的巢狀列表是列表中的列表,可以表示多維資料結構。NumPy 提供 array() 函式將這些巢狀列表轉換為多維陣列。
示例:將巢狀列表轉換為二維 NumPy 陣列
在此示例中,巢狀列表 "nested_list" 表示二維結構(列表的列表)。array() 函式將其轉換為二維 NumPy 陣列 "arr_from_nested_list":
import numpy as np # Convert nested list to array nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] arr_from_nested_list = np.array(nested_list) print("Array from nested list:") print(arr_from_nested_list)
生成的陣列保留二維結構,幷包含與原始巢狀列表相同的元素,如下面的輸出所示:
Array from nested list: [[1 2 3] [4 5 6] [7 8 9]]
示例:轉換具有不同資料型別的巢狀列表
在這裡,巢狀列表包含不同資料型別的元素(整數、浮點數、布林值和字串)。array() 函式將所有元素轉換為字串,從而產生一個具有字串資料型別的同構二維陣列:
import numpy as np # Convert nested list with different data types to array nested_mixed_list = [[1, 2.5], [True, 'hello']] arr_from_nested_mixed_list = np.array(nested_mixed_list) print("Array from nested mixed list:") print(arr_from_nested_mixed_list)
產生的結果如下:
Array from nested mixed list: [['1' '2.5'] ['True' 'hello']]
從 Python 元組
Python 元組是另一種常用的資料結構,可以轉換為 NumPy 陣列。與列表一樣,元組可以用來儲存多個專案,但它們是不可變的,這意味著建立後其內容不能更改。
它可以使用 numpy.array() 函式表示一維和多維資料。
示例
在以下示例中,我們使用 array() 函式將包含整數的 Python 元組轉換為 NumPy 陣列:
import numpy as np # Convert tuple to array my_tuple = (1, 2, 3, 4, 5) arr_from_tuple = np.array(my_tuple) print("Array from tuple:",arr_from_tuple)
我們將獲得如下所示的輸出:
Array from tuple: [1 2 3 4 5]
從現有的 NumPy 陣列
NumPy 提供了幾種方法來從現有的 NumPy 陣列建立新陣列。它們是:
- numpy.copy() 函式
- numpy.asarray() 函式
- numpy.view() 函式
- numpy.reshape() 函式
- 切片
這對於各種任務很有用,例如複製資料、更改資料型別或建立從原始陣列派生的具有特定屬性的新陣列。
示例:使用 numpy.copy() 函式
numpy.copy() 函式建立一個新陣列,它是原始陣列的副本。這確保對新陣列的任何修改都不會影響原始陣列:
import numpy as np # Original array original_array = np.array([1, 2, 3, 4, 5]) # Create a copy of the array copied_array = np.copy(original_array) print("Original array:",original_array) print("Copied array:",copied_array)
獲得的輸出如下:
Original array: [1 2 3 4 5] Copied array: [1 2 3 4 5]
示例:使用 numpy.asarray() 函式
numpy.asarray() 函式將輸入轉換為陣列,但如果輸入已經是陣列,則除非必要(例如,如果指定了不同的資料型別),否則它不會建立副本:
import numpy as np # Original array original_array = np.array([1, 2, 3, 4, 5]) # Create an array from the existing array new_array = np.asarray(original_array, dtype=float) print("Original array:",original_array) print("New array:",new_array)
這將產生以下結果:
Original array: [1 2 3 4 5] New array: [1. 2. 3. 4. 5.]
示例:使用 numpy.view() 函式
numpy.view() 函式建立一個新的陣列物件,它檢視與原始陣列相同的資料。這對於使用不同的資料型別檢視資料很有用:
import numpy as np # Original array original_array = np.array([1, 2, 3, 4, 5], dtype=np.int32) # Create a view of the array with a different dtype viewed_array = original_array.view(dtype=np.float32) print("Original array:",original_array) print("Viewed array with dtype float32:",viewed_array)
以下是上述程式碼的輸出結果 -
Original array: [1 2 3 4 5] Viewed array with dtype float32: [1.e-45 3.e-45 4.e-45 6.e-45 7.e-45]
示例:使用 numpy.reshape() 函式
numpy.reshape() 函式可以將現有陣列重新整形為新的形狀,而不會改變其資料 -
import numpy as np # Original array original_array = np.array([1, 2, 3, 4, 5, 6]) # Reshape the array to 2x3 reshaped_array = original_array.reshape((2, 3)) print("Original array:",original_array) print("Reshaped array (2x3):",reshaped_array)
獲得的輸出結果如下所示 -
Original array: [1 2 3 4 5 6] Reshaped array (2x3): [[1 2 3] [4 5 6]]
示例:使用切片
對現有陣列進行切片會建立一個新的陣列,該陣列是原始陣列的子集 -
import numpy as np # Original array original_array = np.array([1, 2, 3, 4, 5]) # Slice the array to get a subarray sliced_array = original_array[1:4] print("Original array:",original_array) print("Sliced array (elements 1 to 3):",sliced_array)
獲得的輸出結果如下所示 -
原始陣列:[1 2 3 4 5] 切片陣列(元素 1 到 3):[2 3 4]使用範圍物件
Python 的range物件生成指定範圍內的數字,並且可以使用 numpy.array() 函式或 numpy.fromiter() 函式將其轉換為 NumPy 陣列。當您需要建立大型序列而無需首先在記憶體中顯式儲存所有數字時,這很有用。
示例
在這個示例中,range() 物件生成從 1 到 9 的數字。numpy.array() 函式將此 range 物件轉換為 NumPy 陣列 -
import numpy as np # Create a range object my_range = range(1, 10) # Convert range object to array arr_from_range = np.array(my_range) print("Array from range object:",arr_from_range)
執行上述程式碼後,我們將獲得以下輸出:
Array from range object: [1 2 3 4 5 6 7 8 9]