NumPy 是 Python 資料科學領域的核心套件,提供高效率的陣列操作和數值運算功能。本文從字典操作和迴圈控制開始,逐步深入 NumPy 陣列的建立、重塑、多維陣列操作、向量化運算以及統計函式的應用。同時,也比較了 NumPy 與 Python 內建函式的效能差異,並分析了 NumPy 陣列的記憶體使用情況,最後簡述了 NumPy 隨機數字生成的方法,提供讀者更全面的 NumPy 應用。藉由理解這些基礎知識和技巧,開發者能更有效率地處理和分析資料,提升程式碼效能。

字典的建立和操作

首先,讓我們建立一個字典並進行一些基本操作。

# 建立一個字典
d = {'int_obj': 3, 'float_obj': 5.0, 'string_obj': 'Python Trading'}

# 新增一個新鍵值對
d['int_obj_long'] = 10 ** 20

# 顯示字典的內容
print(d)

# 取得字典的鍵
print(d.keys())

# 取得字典的值
print(d.values())

迭代和控制結構

接下來,讓我們看看迭代和控制結構的使用。

# 建立一個範圍物件
r = range(5)

# 使用 for 迴圈迭代範圍物件
for i in r:
    print(i ** 2, end=' ')

# 建立另一個範圍物件
r2 = range(3, 15, 2)

# 使用 for 迴圈迭代範圍物件
for i in r2:
    print(i, end=' ')

結果

這些迭代和控制結構的使用可以幫助我們更有效地處理集合中的元素,並對其進行操作。

內容解密:

在上面的程式碼中,我們使用了 range() 函式來建立一個範圍物件,然後使用 for 迴圈來迭代這個範圍物件。這樣可以讓我們輕鬆地對集合中的每個元素進行操作。

圖表翻譯:

  flowchart TD
    A[建立範圍物件] --> B[使用 for 迴圈迭代]
    B --> C[對集合中的每個元素進行操作]
    C --> D[顯示結果]

這個圖表顯示了我們如何使用 range() 函式和 for 迴圈來迭代集合中的元素,並對其進行操作。

Python 程式設計中的特殊用法

Python 在許多地方都依賴於一些特殊的用法。讓我們從一個相當流行的用法開始說起:列表推導(list comprehension)。

列表推導

列表推導是一種快速建立列表的方法。以下是如何使用列表推導建立一個包含 0 到 9 的平方的列表:

lc = [i ** 2 for i in range(10)]
print(lc)

這會輸出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

迴圈的使用

在 Python 中,迴圈可以用來重複執行某些指令。有兩種主要的迴圈:for 迴圈和 while 迴圈。

for 迴圈

for 迴圈可以用來迭代一個序列(如列表、字串或範圍),並對每個專案執行某些指令。

fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
    print(fruit)

這會輸出:

apple
banana
cherry

while 迴圈

while 迴圈可以用來重複執行某些指令,直到某個條件被滿足。

i = 0
while i < 5:
    print(i)
    i += 1

這會輸出: 0 1 2 3 4

範圍物件

範圍物件(range object)是一種特殊的物件,可以用來建立一個數字序列。

for i in range(5):
    print(i)

這會輸出: 0 1 2 3 4

列表和字串的迭代

列表和字串都可以被迭代。

my_list = [1, 2, 3, 4, 5]
for item in my_list:
    print(item)

my_string = 'hello'
for char in my_string:
    print(char)

這會輸出:

1
2
3
4
5
h
e
l
l
o

while 迴圈的使用

while 迴圈可以用來重複執行某些指令,直到某個條件被滿足。

i = 0
while i < 5:
    print(i ** 0.5, end=' ')
    i += 1

這會輸出: 0.0 1.0 1.4142135623730951 1.7320508075688772 2.0

內容解密:

以上程式碼展示了 Python 中的特殊用法,包括列表推導、迴圈的使用、範圍物件、列表和字串的迭代等。這些用法可以幫助我們快速建立列表、重複執行指令、迭代序列等。同時,也展示了 while 迴圈的使用,可以重複執行某些指令,直到某個條件被滿足。

Python函式與列表推導

Python是一種強大的程式語言,提供了多種方法來建立和操作函式和列表。以下是關於Python函式和列表推導的詳細介紹。

列表推導

列表推導是一種建立新列表的方法,透過使用迴圈和條件陳述式來過濾和轉換現有列表中的元素。以下是一個例子:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
squares = [x**2 for x in numbers]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

在這個例子中,列表推導建立了一個新列表squares,其中包含了numbers列表中每個元素的平方。

Lambda函式

Lambda函式是一種匿名函式,可以使用lambda關鍵字來定義。以下是一個例子:

f = lambda x: x**2
print(f(5))  # 25

在這個例子中,Lambda函式f接受一個引數x,並傳回x的平方。

普通函式

普通函式是使用def關鍵字來定義的。以下是一個例子:

def square(x):
    return x**2
print(square(5))  # 25

在這個例子中,函式square接受一個引數x,並傳回x的平方。

對列表中的元素應用函式

可以使用map()函式來對列表中的每個元素應用一個函式。以下是一個例子:

numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x**2, numbers))
print(squares)  # [1, 4, 9, 16, 25]

在這個例子中,map()函式將Lambda函式lambda x: x**2應用到numbers列表中的每個元素,然後傳回一個新列表,其中包含了每個元素的平方。

圖表視覺化

可以使用Mermaid語法來建立圖表,以視覺化地展示資料。以下是一個例子:

  flowchart TD
    A[資料] --> B[轉換]
    B --> C[視覺化]
    C --> D[圖表]

在這個例子中,Mermaid圖表展示了資料轉換和視覺化的過程。

圖表翻譯

圖表翻譯是指將圖表轉換為文字描述。以下是一個例子:

圖表翻譯:

圖表展示了資料轉換和視覺化的過程。首先,資料被轉換為一個新格式。然後,轉換後的資料被視覺化為圖表。最後,圖表被顯示出來。

內容解密

內容解密是指將程式碼或資料轉換為易於理解的文字描述。以下是一個例子:

內容解密:

程式碼使用列表推導來建立一個新列表,其中包含了每個元素的平方。然後,程式碼使用map()函式來對列表中的每個元素應用一個函式。最後,程式碼將結果顯示出來。

函式定義與應用

函式是程式設計中的基本單元,允許我們將程式碼組織成可重複使用的塊。Python 中的函式使用 def 陳述式定義。

基本函式定義

以下是一個簡單的函式定義,計算 x 的指數:

import math

def f(x):
    return math.exp(x)

print(f(5))  # 輸出:148.4131591025766

這個函式接受一個引數 x,並傳回 x 的指數。

可變引數函式

函式也可以接受可變數量的引數,使用 *args 語法:

def f(*args):
    for arg in args:
        print(arg)

    return None

l = ['a', 'b', 'c', 'd', 'e']
f(l)  # 輸出:['a', 'b', 'c', 'd', 'e']

這個函式接受任意數量的引數,並將它們作為一個可迭代物件(例如列表)傳遞給函式。

條件控制函式

函式也可以使用 if-elif-else 控制結構傳回不同的值:

import random

a = random.randint(0, 1000)
print(f'Random number is {a}')

def number_decide(number):
    if number < 10:
        return "Number is single digit."
    elif 10 <= number < 100:
        return "Number is double digit."
    else:
        return "Number is triple digit."

print(number_decide(a))

這個函式根據輸入的數字傳回不同的字串。

混合語言 AI Agent

以下是一個混合語言的 AI Agent 範例,使用 Python、Rust 和 Mojo:

# 混合語言 AI Agent - 3 行極簡版
from rust_io import read_sensors          # Rust 資料採集
from mojo_compute import transform_data   # Mojo 計算
from transformers import pipeline         # Python & HuggingFace
# 混合處理流程: Rust採集 -> Mojo處理 -> Python推理
device_data = read_sensors("MEDICAL_DEVICE")  # Rust部分
processed_data = transform_data(device_data)  # Mojo部分
anomaly_result = pipeline("anomaly-detection", model="medical/transformer")(processed_data)  # Python+HF部分

這個範例展示瞭如何混合使用不同語言和技術來建立一個 AI Agent。

圖表翻譯:

  flowchart TD
    A[開始] --> B[資料採集]
    B --> C[資料處理]
    C --> D[推理]
    D --> E[結果]

這個圖表展示了混合語言 AI Agent 的處理流程。

NumPy 基礎與應用

NumPy 是一個 Python 套件,允許您高效地處理和操作大型資料結構。它是科學計算和資料分析的基本。在本節中,我們將探討 NumPy 的基本概念和應用。

NumPy 陣列

NumPy 的核心是 ndarray 類別,它提供了 n 維陣列物件的資料結構。您可以從列表物件建立 ndarray 物件:

import numpy as np

a = np.array(range(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]

陣列重塑

您可以使用 reshape 方法重塑陣列的形狀:

b = a.reshape((4, 6))
print(b)

輸出:

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

多維陣列

您也可以建立多維陣列:

c = a.reshape((2, 3, 4))
print(c)

輸出:

[[[ 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 的優點

NumPy 提供了多種優點,包括:

  • 高效的資料處理和操作
  • 支援大型資料結構
  • 提供多種數學函式和操作
內容解密:

在上面的程式碼中,我們使用 np.array 函式建立了一個 NumPy 陣列。然後,我們使用 reshape 方法重塑了陣列的形狀。這些操作可以幫助您更好地理解和運算元據。在實際應用中,您可以使用 NumPy 進行資料分析、科學計算和機器學習等任務。

圖表翻譯:

以下是 NumPy 陣列的 Mermaid 圖表:

  graph LR
    A[NumPy 陣列] --> B[重塑]
    B --> C[多維陣列]
    C --> D[資料分析]
    D --> E[機器學習]

這個圖表展示了 NumPy 陣列的基本概念和應用,包括重塑、多維陣列、資料分析和機器學習。透過使用 NumPy,您可以簡化資料處理和分析的過程,提高您的工作效率。

NumPy 的力量:向量化運算和資料結構

NumPy 是 Python 中一個強大的資料處理函式庫,它提供了高效的資料結構和運算方式。在本節中,我們將探討 NumPy 的向量化運算和資料結構的特點。

向量化運算

NumPy 的向量化運算是其最強大的功能之一。向量化運算允許您在陣列上執行操作,而不需要使用迴圈。這使得您的程式碼更加簡潔和高效。

import numpy as np

# 建立一個 2x3 的陣列
b = np.array([[0, 1, 2], [3, 4, 5]])

# 執行向量化運算
result = 2 * b

print(result)

輸出:

[[ 0  2  4]
 [ 6  8 10]]

資料結構

NumPy 的資料結構是其另一個強大的功能。NumPy 提供了多種資料結構,包括一維陣列、多維陣列和矩陣。

import numpy as np

# 建立一個一維陣列
a = np.array([1, 2, 3, 4, 5])

# 建立一個多維陣列
b = np.array([[0, 1, 2], [3, 4, 5]])

# 執行資料結構操作
result = b ** 2

print(result)

輸出:

[[ 0  1  4]
 [ 9 16 25]]

Lambda 函式

NumPy 也支援 Lambda 函式,允許您定義簡單的函式。

import numpy as np

# 定義一個 Lambda 函式
f = lambda x: x ** 2 - 2 * x + 0.5

# 執行 Lambda 函式
result = f(2)

print(result)

輸出:

0.5

NumPy陣列物件的運算和選取

NumPy是一個強大的Python函式庫,提供了高效的陣列和矩陣運算功能。以下是NumPy陣列物件的運算和選取的範例。

基本運算

NumPy支援基本的算術運算,例如加、減、乘、除等。以下是範例:

import numpy as np

# 建立兩個NumPy陣列
a = np.array([1, 2, 3, 4, 5])
b = np.array([6, 7, 8, 9, 10])

# 基本運算
print(a + b)  # 加法
print(a - b)  # 減法
print(a * b)  # 乘法
print(a / b)  # 除法

選取和切片

NumPy陣列物件支援基本和高階的選取和切片功能。以下是範例:

# 建立一個NumPy陣列
a = np.array([1, 2, 3, 4, 5])

# 基本選取
print(a[0])  # 選取第一個元素
print(a[-1])  # 選取最後一個元素

# 切片
print(a[1:3])  # 選取第二個到第三個元素
print(a[1:])  # 選取第二個到最後一個元素
print(a[:3])  # 選取第一個到第三個元素

布林運算

NumPy支援布林運算,例如大於、小於、等於等。以下是範例:

# 建立一個NumPy陣列
a = np.array([1, 2, 3, 4, 5])

# 布林運算
print(a > 3)  # 選取大於3的元素
print(a < 3)  # 選取小於3的元素
print(a == 3)  # 選取等於3的元素

陣列方法和NumPy函式

NumPy陣列物件有多個方法和函式可供使用。以下是範例:

# 建立一個NumPy陣列
a = np.array([1, 2, 3, 4, 5])

# 陣列方法
print(a.sum())  # 計算陣列的總和
print(a.mean())  # 計算陣列的平均值
print(a.max())  # 計算陣列的最大值
print(a.min())  # 計算陣列的最小值

高階選取和切片

NumPy陣列物件支援高階的選取和切片功能,例如使用布林陣列進行選取。以下是範例:

# 建立一個NumPy陣列
a = np.array([1, 2, 3, 4, 5])

# 使用布林陣列進行選取
print(a[a > 3])  # 選取大於3的元素
print(a[a < 3])  # 選取小於3的元素

多維陣列

NumPy陣列物件可以是多維的,以下是範例:

# 建立一個多維NumPy陣列
a = np.array([[1, 2, 3], [4, 5, 6]])

# 基本選取
print(a[0, 0])  # 選取第一個元素
print(a[1, 2])  # 選取最後一個元素

# 切片
print(a[0, 1:3])  # 選取第一行的第二個到第三個元素
print(a[1, 1:3])  # 選取第二行的第二個到第三個元素

布林運算和多維陣列

NumPy支援布林運算和多維陣列,以下是範例:

# 建立一個多維NumPy陣列
a = np.array([[1, 2, 3], [4, 5, 6]])

# 布林運算
print(a > 3)  # 選取大於3的元素
print(a < 3)  # 選取小於3的元素
print(a == 3)  # 選取等於3的元素

陣列方法和多維陣列

NumPy陣列物件有多個方法和函式可供使用,以下是範例:

# 建立一個多維NumPy陣列
a = np.array([[1, 2, 3], [4, 5, 6]])

# 陣列方法
print(a.sum())  # 計算陣列的總和
print(a.mean())  # 計算陣列的平均值
print(a.max())  # 計算陣列的最大值
print(a.min())  # 計算陣列的最小值

圖表翻譯:

以下是使用Mermaid語法繪製的NumPy陣列物件的運算和選取流程圖:

  flowchart TD
    A[建立NumPy陣列] --> B[基本運算]
    B --> C[選取和切片]
    C --> D[布林運算]
    D --> E[陣列方法和NumPy函式]
    E --> F[高階選取和切片]
    F --> G[多維陣列]
    G --> H[布林運算和多維陣列]
    H --> I[陣列方法和多維陣列]

內容解密:

以上內容介紹了NumPy陣列物件的運算和選取,包括基本運算、選取和切片、布林運算、陣列方法和NumPy函式等。同時也介紹了多維陣列的運算和選取,包括布林運算和陣列方法。這些內容對於使用NumPy進行資料分析和科學計算非常重要。

NumPy 的統計函式

NumPy 提供了多種統計函式,包括 summeanstd 等。這些函式可以用來計算 NumPy 陣列中的元素之和、平均值、標準差等。

1. sum 函式

sum 函式可以用來計算 NumPy 陣列中的元素之和。例如:

import numpy as np

a = np.array([1, 2, 3, 4, 5])
print(np.sum(a))  # Output: 15

2. mean 函式

mean 函式可以用來計算 NumPy 陣列中的元素平均值。例如:

import numpy as np

b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.mean(b, axis=0))  # Output: array([4., 5., 6.])
print(np.mean(b, axis=1))  # Output: array([2., 5., 8.])

3. std 函式

std 函式可以用來計算 NumPy 陣列中的元素標準差。例如:

import numpy as np

c = np.array([1, 2, 3, 4, 5])
print(np.std(c))  # Output: 1.4142135623730951

4. 通用函式(ufunc)

NumPy 還提供了多種通用函式(ufunc),可以用來執行各種數學運算。例如:

import numpy as np

a = np.array([1, 2, 3, 4, 5])
print(np.sqrt(a))  # Output: array([1., 1.41421356, 1.73205081, 2., 2.23606798])
圖表翻譯:
  graph LR
    A[NumPy 陣列] --> B[統計函式]
    B --> C[sum]
    B --> D[mean]
    B --> E[std]
    C --> F[計算元素之和]
    D --> G[計算元素平均值]
    E --> H[計算元素標準差]

內容解密:

NumPy 的統計函式和通用函式可以用來執行各種數學運算和統計分析。這些函式可以用來簡化程式碼,提高效率和準確性。例如,sum 函式可以用來計算 NumPy 陣列中的元素之和,mean 函式可以用來計算 NumPy 陣列中的元素平均值,std 函式可以用來計算 NumPy 陣列中的元素標準差。

瞭解 NumPy 的效能優勢

NumPy 的向量化運算可以大幅度提升效能,但也可能導致記憶體使用量增加。以下是使用 NumPy 的 np.sin() 函式對陣列進行運算的例子:

import numpy as np

# 建立一個範圍從 0 到 1000000 的陣列
a = np.arange(1000000)

# 使用 np.sin() 函式計算陣列中每個元素的正弦值
b = np.sin(a)

print(b)

比較 NumPy 和 Python 內建函式的效能

使用 NumPy 的向量化運算通常比使用 Python 內建函式要快。但是,使用 NumPy 的向量化運算也可能導致記憶體使用量增加。以下是使用 NumPy 和 Python 內建函式計算陣列中每個元素的正弦值的效能比較:

import numpy as np
import time
import math

# 建立一個範圍從 0 到 1000000 的陣列
a = np.arange(1000000)

# 使用 NumPy 的 np.sin() 函式計算陣列中每個元素的正弦值
start_time = time.time()
b = np.sin(a)
end_time = time.time()
print("NumPy 的 np.sin() 函式計算時間:", end_time - start_time)

# 使用 Python 內建的 math.sin() 函式計算陣列中每個元素的正弦值
start_time = time.time()
c = [math.sin(x) for x in a]
end_time = time.time()
print("Python 內建的 math.sin() 函式計算時間:", end_time - start_time)

瞭解 NumPy 陣列的記憶體使用量

NumPy 陣列的記憶體使用量可以使用 sys.getsizeof() 函式和 nbytes 屬性來計算。以下是計算 NumPy 陣列的記憶體使用量的例子:

import numpy as np
import sys

# 建立一個範圍從 0 到 1000000 的陣列
a = np.arange(1000000)

# 使用 sys.getsizeof() 函式計算陣列的記憶體使用量
print("陣列的記憶體使用量:", sys.getsizeof(a))

# 使用 nbytes 屬性計算陣列的記憶體使用量
print("陣列的記憶體使用量:", a.nbytes)

建立 NumPy 陣列

NumPy 陣列可以使用 np.arange() 函式建立。以下是建立 NumPy 陣列的例子:

import numpy as np

# 建立一個範圍從 0 到 10 的陣列
a = np.arange(11)

print(a)

內容解密:

以上程式碼示範瞭如何使用 NumPy 的向量化運算來計算陣列中每個元素的正弦值,並比較了使用 NumPy 和 Python 內建函式的效能。另外,以上程式碼也示範瞭如何計算 NumPy 陣列的記憶體使用量和建立 NumPy 陣列。

圖表翻譯:

  flowchart TD
    A[建立陣列] --> B[計算正弦值]
    B --> C[比較效能]
    C --> D[計算記憶體使用量]
    D --> E[建立 NumPy 陣列]

以上圖表示範了使用 NumPy 的流程,從建立陣列到計算記憶體使用量和建立 NumPy 陣列。

生成隨機數字

在金融分析中,經常需要使用隨機數字。NumPy 提供了許多函式來從不同的分佈中抽樣,例如標準常態分佈和普瓦松分佈。這些函式可以在 numpy.random 子套件中找到。

從底層實作到高階應用的全面檢視顯示,Python 的核心特性與 NumPy 函式函式庫的結合,為金融分析提供了強大的工具。本文深入探討了字典操作、控制結構、列表推導、函式定義、NumPy 陣列操作、統計函式以及效能比較等關鍵技術,展現了 Python 在處理金融資料方面的靈活性與效率。技術堆疊的各層級協同運作中體現,Python 的簡潔語法與 NumPy 的向量化運算能力相得益彰,有效簡化了複雜的金融模型建構和資料分析流程。對於追求高效能運算的金融應用,NumPy 的向量化和廣播機制是不可或缺的利器,但同時也需留意記憶體管理。展望未來,隨著 Python 生態系統的持續發展,預期會有更多針對金融領域的專用工具和函式函式庫出現,進一步提升 Python 在金融科技中的應用價值。對於金融分析師和開發者而言,持續學習和掌握這些新興技術將是保持競爭力的關鍵。玄貓認為,精通 Python 和 NumPy 將是未來金融科技人才的核心技能。