NumPy教程

From binaryoption
Jump to navigation Jump to search
Баннер1

---

  1. NumPy 教程

NumPy (Numerical Python) 是 Python 中用于科学计算的基础库。它提供高性能的多维数组对象,以及用于处理这些数组的工具。对于从事数据科学、机器学习,甚至金融建模(例如 二元期权定价)的开发者来说,NumPy 都是必不可少的。 本教程旨在为初学者提供 NumPy 的全面介绍。

NumPy 的优势

相比于 Python 列表,NumPy 数组 (ndarray) 具有以下优势:

  • **效率:** NumPy 数组在内存中以连续块的形式存储,这使得数值运算速度更快。
  • **向量化:** NumPy 允许你对整个数组执行操作,而无需显式循环。 这被称为向量化,可以显著提高代码的可读性和性能。
  • **广播:** NumPy 的广播机制允许你在不同形状的数组上执行运算,而无需手动调整数组的大小。
  • **丰富的函数库:** NumPy 提供了大量的数学函数,用于执行各种科学计算,例如线性代数、傅里叶变换和随机数生成。

安装 NumPy

使用 pip 可以轻松安装 NumPy:

```bash pip install numpy ```

导入 NumPy

在 Python 脚本中导入 NumPy 的标准方法是使用别名 `np`:

```python import numpy as np ```

创建 NumPy 数组

有多种方法可以创建 NumPy 数组:

  • **从 Python 列表创建:**
   ```python
   my_list = [1, 2, 3, 4, 5]
   my_array = np.array(my_list)
   print(my_array)  # 输出: [1 2 3 4 5]
   ```
  • **使用 NumPy 函数创建:**
   *   `np.zeros(shape)`: 创建一个指定形状的数组,并用零填充。
   *   `np.ones(shape)`: 创建一个指定形状的数组,并用一填充。
   *   `np.arange(start, stop, step)`: 创建一个指定范围内的数组。类似于 Python 的 `range()` 函数。
   *   `np.linspace(start, stop, num)`: 创建一个指定范围内均匀分布的数组。
   *   `np.random.rand(shape)`: 创建一个指定形状的数组,并用 0 到 1 之间的随机数填充。这在 蒙特卡洛模拟 中非常有用。
   *   `np.random.randn(shape)`: 创建一个指定形状的数组,并用标准正态分布的随机数填充。
   示例:
   ```python
   zeros_array = np.zeros((2, 3))  # 创建一个 2x3 的零数组
   print(zeros_array)
   arange_array = np.arange(0, 10, 2)  # 创建一个从 0 到 10 (不包含 10) 的数组,步长为 2
   print(arange_array)
   random_array = np.random.rand(3, 2)  # 创建一个 3x2 的随机数组
   print(random_array)
   ```

数组的属性

NumPy 数组具有许多有用的属性:

  • `shape`: 数组的形状(维度)。
  • `dtype`: 数组中元素的数据类型。
  • `ndim`: 数组的维度数。
  • `size`: 数组中元素的总数。
  • `itemsize`: 数组中每个元素的大小(字节数)。

示例:

```python my_array = np.array([[1, 2, 3], [4, 5, 6]])

print(my_array.shape) # 输出: (2, 3) print(my_array.dtype) # 输出: int64 (或根据系统而定) print(my_array.ndim) # 输出: 2 print(my_array.size) # 输出: 6 print(my_array.itemsize) # 输出: 8 ```

数组索引和切片

与 Python 列表类似,可以使用索引和切片来访问 NumPy 数组中的元素。

  • **索引:** 使用方括号 `[]` 访问单个元素。索引从 0 开始。
  • **切片:** 使用冒号 `:` 指定切片的范围。

示例:

```python my_array = np.array([10, 20, 30, 40, 50])

print(my_array[0]) # 输出: 10 print(my_array[1:4]) # 输出: [20 30 40] print(my_array[:3]) # 输出: [10 20 30] print(my_array[2:]) # 输出: [30 40 50] print(my_array[-1]) # 输出: 50 (最后一个元素)

  1. 多维数组

my_2d_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(my_2d_array[0, 1]) # 输出: 2 (第一行,第二列) print(my_2d_array[:2, 1:]) # 输出: [[2 3] [5 6]] (前两行,从第二列开始) ```

数组运算

NumPy 提供了大量的数组运算功能:

  • **基本算术运算:** 加法 (`+`)、减法 (`-`)、乘法 (`*`)、除法 (`/`)、指数 (`**`)。
  • **通用函数:** NumPy 提供了许多通用函数,用于执行各种数学运算,例如 `np.sin()`, `np.cos()`, `np.exp()`, `np.log()`。
  • **线性代数运算:** NumPy 提供了线性代数运算函数,例如 `np.dot()`, `np.linalg.inv()`, `np.linalg.det()`。 这在 期权定价模型 中至关重要。
  • **统计运算:** NumPy 提供了统计运算函数,例如 `np.mean()`, `np.std()`, `np.sum()`, `np.max()`, `np.min()`。
  • **广播:** NumPy 的广播机制允许你在不同形状的数组上执行运算。

示例:

```python array1 = np.array([1, 2, 3]) array2 = np.array([4, 5, 6])

print(array1 + array2) # 输出: [5 7 9] print(array1 * 2) # 输出: [2 4 6] print(np.sin(array1)) # 输出: [0.84147098 0.90929743 0.14112001] print(np.mean(array1)) # 输出: 2.0 ```

数组变形

可以使用 `np.reshape()` 函数来改变数组的形状。

示例:

```python my_array = np.arange(12) print(my_array) # 输出: [ 0 1 2 3 4 5 6 7 8 9 10 11]

reshaped_array = my_array.reshape(3, 4) # 将数组变形为 3x4 print(reshaped_array)

  1. 输出:
  2. [[ 0 1 2 3]
  3. [ 4 5 6 7]
  4. [ 8 9 10 11]]

```

数组合并和分割

  • **合并:** 使用 `np.concatenate()`, `np.vstack()`, `np.hstack()` 函数合并数组。
  • **分割:** 使用 `np.split()`, `np.vsplit()`, `np.hsplit()` 函数分割数组。

示例:

```python array1 = np.array([1, 2, 3]) array2 = np.array([4, 5, 6])

concatenated_array = np.concatenate((array1, array2)) print(concatenated_array) # 输出: [1 2 3 4 5 6]

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

vstack_array = np.vstack((array3, array4)) # 垂直堆叠 print(vstack_array)

  1. 输出:
  2. [[1 2]
  3. [3 4]
  4. [5 6]
  5. [7 8]]

```

数组的排序

可以使用 `np.sort()` 函数对数组进行排序。

示例:

```python my_array = np.array([3, 1, 4, 1, 5, 9, 2, 6])

sorted_array = np.sort(my_array) print(sorted_array) # 输出: [1 1 2 3 4 5 6 9] ```

掩码和布尔索引

可以使用布尔索引来选择数组中满足特定条件的元素。

示例:

```python my_array = np.array([1, 2, 3, 4, 5, 6])

mask = my_array > 3 print(mask) # 输出: [False False False True True True]

filtered_array = my_array[mask] print(filtered_array) # 输出: [4 5 6] ```

NumPy 与金融建模

NumPy 在金融建模中具有广泛的应用,特别是在 量化交易 策略中:

  • **期权定价:** NumPy 可以用于计算 Black-Scholes 模型 和其他期权定价模型。
  • **风险管理:** NumPy 可以用于计算投资组合的风险指标,例如 VaR (Value at Risk)。
  • **时间序列分析:** NumPy 可以用于处理金融时间序列数据,例如股票价格和交易量。
  • **回测:** NumPy 可以用于回测交易策略,并评估其性能。
  • **优化:** NumPy 可以用于优化投资组合,以最大化回报并最小化风险。
  • **成交量分析:** 使用 NumPy 处理 OBV (On Balance Volume) 指标,分析市场情绪。
  • **技术分析:** 计算 移动平均线RSI (Relative Strength Index) 等技术指标。
  • **相关性分析:** 评估不同资产之间的 相关系数
  • **波动率计算:** 计算历史波动率,用于 期权定价 和风险管理。
  • **收益率计算:** 计算资产的收益率,用于绩效评估。

总结

NumPy 是 Python 中进行数值计算的强大工具。 通过学习 NumPy 的基础知识,你可以更有效地处理数据,并开发更复杂的金融模型和交易策略。 掌握 NumPy 对于任何希望在数据科学、机器学习或金融领域取得成功的开发者来说都是至关重要的。 进一步学习 SciPyPandas 库可以扩展你的数据分析和科学计算能力。

NumPy 常用函数
函数名称 描述 示例
`np.array()` 创建 NumPy 数组 `np.array([1, 2, 3])`
`np.zeros()` 创建零数组 `np.zeros((2, 3))`
`np.ones()` 创建一数组 `np.ones((2, 3))`
`np.arange()` 创建等差数组 `np.arange(0, 10, 2)`
`np.linspace()` 创建等分数组 `np.linspace(0, 1, 5)`
`np.random.rand()` 创建随机数组 (0-1) `np.random.rand(3, 2)`
`np.random.randn()` 创建标准正态分布随机数组 `np.random.randn(3, 2)`
`np.reshape()` 改变数组形状 `my_array.reshape(3, 4)`
`np.concatenate()` 合并数组 `np.concatenate((array1, array2))`
`np.sort()` 排序数组 `np.sort(my_array)`

二元期权 二元期权定价 蒙特卡洛模拟 量化交易 Black-Scholes 模型 VaR OBV 移动平均线 RSI 相关系数 SciPy Pandas 期权定价模型 成交量分析 技术分析 期权 风险管理 金融建模 投资组合优化 时间序列分析 回测 波动率计算 收益率计算

立即开始交易

注册 IQ Option (最低存款 $10) 开设 Pocket Option 账户 (最低存款 $5)

加入我们的社区

订阅我们的 Telegram 频道 @strategybin 获取: ✓ 每日交易信号 ✓ 独家策略分析 ✓ 市场趋势警报 ✓ 新手教育资源

Баннер