NumPy 陣列排序、過濾與隨機數生成詳解

小万哥丶發表於2024-05-20

NumPy 陣列排序

排序陣列

排序陣列意味著將元素按特定順序排列。順序可以是數字大小、字母順序、升序或降序等。

NumPy 的 ndarray 物件提供了一個名為 sort() 的函式,用於對陣列進行排序。

示例:

import numpy as np

arr = np.array([3, 2, 0, 1])

print(np.sort(arr))

輸出:

[0 1 2 3]

注意:

sort() 方法會返回陣列的副本,原始陣列不會被修改。
可以對字串陣列、布林陣列等其他資料型別進行排序。

排序二維陣列

對於二維陣列,sort() 方法會對每一行進行排序。

示例:

import numpy as np

arr = np.array([[3, 2, 4], [5, 0, 1]])

print(np.sort(arr))

輸出:

[[0 1 2]
 [3 4 5]]

練習

使用 NumPy 正確的方法對以下陣列進行排序:

arr = np.array([3, 2, 0, 1])

x = np.sort(
    # 請在此處填寫程式碼
)

print(x)

解答:

x = np.sort(arr)

NumPy 陣列過濾

過濾陣列

過濾陣列是指從現有陣列中選取部分元素,並建立新的陣列。

在 NumPy 中,可以使用布林索引列表來過濾陣列。布林索引列表是一個與陣列索引相對應的布林值列表。

如果索引處的值為 True,則該元素會被包含在過濾後的陣列中;如果為 False,則會被排除。

示例:

import numpy as np

arr = np.array([41, 42, 43, 44])

x = [True, False, True, False]

newarr = arr[x]

print(newarr)

輸出:

[41 43]

解釋:

新陣列 newarr 只包含 arr 中索引為 0 和 2 的元素,因為 x 對應索引處的值為 True

建立過濾陣列

通常情況下,我們需要根據條件來建立過濾陣列。

示例:

僅返回大於 42 的元素:

import numpy as np

arr = np.array([41, 42, 43, 44])

filter_arr = arr > 42

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)

輸出:

[False  True  True  True]
[43 44]

僅返回偶數元素:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7])

filter_arr = arr % 2 == 0

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)

輸出:

[False  True  False  True  False  True  False]
[2 4 6]

直接從陣列建立過濾

NumPy 提供了一種更簡潔的方式來建立過濾陣列,即直接在條件中使用陣列:

示例:

僅返回大於 42 的元素:

import numpy as np

arr = np.array([41, 42, 43, 44])

newarr = arr[arr > 42]

print(newarr)

輸出:

[43 44]

僅返回偶數元素:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7])

newarr = arr[arr % 2 == 0]

print(newarr)

輸出:

[2 4 6]

練習

使用 NumPy 的直接過濾方法,從以下陣列中過濾出所有平方為偶數的元素:

import numpy as np

arr = np.

NumPy 中的隨機數

什麼是隨機數?

隨機數是指無法透過確定性方法預測其值的資料。通常情況下,隨機數是指在一定範圍內均勻分佈的數字。

在計算機中,由於程式的確定性,不可能生成真正的隨機數。因此,通常使用偽隨機數來代替隨機數。偽隨機數是透過演算法生成的,但看起來像隨機數。

NumPy 中的隨機數生成

NumPy 提供了 random 模組用於生成隨機數。該模組提供了多種方法,可以生成不同型別和分佈的隨機數。

生成隨機整數

randint(low, high, size):生成指定範圍內的隨機整數。
low:下限,預設為 0。
high:上限,不包括上限本身。
size:輸出陣列的形狀。

示例:

import numpy as np

# 生成 10 個介於 0 和 100 之間的隨機整數
x = np.random.randint(0, 101, size=10)
print(x)

生成隨機浮點數

rand(size):生成介於 0 和 1 之間的隨機浮點數。
size:輸出陣列的形狀。

示例:

import numpy as np

# 生成 5 個隨機浮點數
x = np.random.rand(5)
print(x)

從陣列中生成隨機數

choice(a, size, replace):從陣列 a 中隨機選擇元素。
a:源陣列。
size:輸出陣列的形狀。
replace:是否允許重複選擇元素,預設為 False

示例:

import numpy as np

# 從陣列 [1, 2, 3, 4, 5] 中隨機選擇 3 個元素
x = np.random.choice([1, 2, 3, 4, 5], size=3)
print(x)

生成指定分佈的隨機數

NumPy 還提供了其他方法來生成特定分佈的隨機數,例如正態分佈、均勻分佈、指數分佈等。

randn(size):生成服從標準正態分佈的隨機數。
randm(size):生成服從均勻分佈的隨機整數。
beta(a, b, size):生成服從 Beta 分佈的隨機數。
gamma(shape, scale, size):生成服從 Gamma 分佈的隨機數。
poisson(lam, size):生成服從泊松分佈的隨機整數。

例如,生成 10 個服從標準正態分佈的隨機數:

import numpy as np

x = np.random.randn(10)
print(x)

練習

  1. 使用 randint 方法生成一個包含 20 個介於 100 到 200 之間的隨機整數的陣列。
  2. 使用 rand 方法生成一個包含 15 個介於 0 和 1 之間的隨機浮點數的陣列。
  3. 從陣列 [1, 3, 5, 7, 9] 中隨機選擇 10 個元素,並允許重複。
  4. 生成 5 個服從標準正態分佈的隨機數。

解決方案

import numpy as np

# 1. 使用 randint 方法生成隨機整數陣列
random_ints = np.random.randint(100, 201, size=20)
print(random_ints)

# 2. 使用 rand 方法生成隨機浮點數陣列
random_floats = np.random.rand(15)
print(random_floats)

# 3. 從陣列中隨機選擇元素
random_elements = np.random.choice([1, 3, 5, 7, 9], size=10, replace=True)
print(random_elements)

# 4. 生成服從標準正態分佈的隨機數
normal_randoms = np.random.randn(5)
print(normal_randoms)

最後

為了方便其他裝置和平臺的小夥伴觀看往期文章:

微信公眾號搜尋:Let us Coding,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關注

相關文章