Numpy 数组操作

From binaryoption
Jump to navigation Jump to search
Баннер1
    1. NumPy 数组操作:初学者指南

NumPy(Numerical Python)是 Python 科学计算的基础库。它提供了一个高性能的多维数组对象,以及用于处理这些数组的工具。对于进行数据分析、机器学习,甚至在金融领域进行量化交易(例如量化交易策略期权定价模型)等工作,NumPy 都是必不可少的。本文将深入探讨 NumPy 数组的操作,旨在为初学者提供全面的指导。

创建 NumPy 数组

NumPy 数组可以使用多种方式创建。

  • **从 Python 列表创建:** 最简单的方式是使用 `numpy.array()` 函数。

```python import numpy as np

my_list = [1, 2, 3, 4, 5] my_array = np.array(my_list) print(my_array) # 输出: [1 2 3 4 5] print(type(my_array)) # 输出: <class 'numpy.ndarray'> ```

  • **使用 NumPy 内置函数:** NumPy 提供了一些内置函数来创建特定类型的数组。
   * `numpy.zeros()`: 创建一个指定形状的数组,并用零填充。
   * `numpy.ones()`: 创建一个指定形状的数组,并用一填充。
   * `numpy.arange()`: 创建一个在指定范围内均匀分布的数组。类似于 Python 的 `range()` 函数。
   * `numpy.linspace()`: 创建一个在指定范围内均匀分布的数组,但指定的是元素的数量。
   * `numpy.random.rand()`: 创建一个指定形状的数组,并用 0 到 1 之间的随机数填充。
   * `numpy.random.randn()`: 创建一个指定形状的数组,并用标准正态分布的随机数填充。
   * `numpy.full()`: 创建一个指定形状的数组,并用指定的值填充。

```python import numpy as np

zeros_array = np.zeros((2, 3)) # 创建一个 2x3 的零数组 print(zeros_array)

ones_array = np.ones((3, 2)) # 创建一个 3x2 的一数组 print(ones_array)

arange_array = np.arange(10) # 创建一个包含 0 到 9 的数组 print(arange_array)

linspace_array = np.linspace(0, 1, 5) # 创建一个包含 5 个在 0 到 1 之间均匀分布的数 print(linspace_array)

rand_array = np.random.rand(2, 2) # 创建一个 2x2 的随机数组 print(rand_array) ```

数组的属性

了解数组的属性对于有效地操作数组至关重要。

  • `shape`: 数组的形状,表示每个维度的大小。例如,一个 2x3 的数组的形状是 (2, 3)。
  • `ndim`: 数组的维度数量。例如,一个 2x3 的数组的维度是 2。
  • `dtype`: 数组中元素的数据类型。例如,`int64`、`float64`、`bool` 等。
  • `size`: 数组中元素的总数量。
  • `itemsize`: 每个元素占用的字节数。

```python import numpy as np

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

print(my_array.shape) # 输出: (2, 3) print(my_array.ndim) # 输出: 2 print(my_array.dtype) # 输出: int64 (取决于系统) print(my_array.size) # 输出: 6 print(my_array.itemsize) # 输出: 8 (取决于系统) ```

数组索引和切片

NumPy 数组可以使用索引和切片来访问和修改数组中的元素。

  • **索引:** 使用整数索引来访问数组中的单个元素。索引从 0 开始。
  • **切片:** 使用切片来访问数组中的一部分元素。切片语法为 `[start:stop:step]`。

```python import numpy as np

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[::2]) # 输出: [10 30 50]

  1. 多维数组的索引和切片

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

print(my_2d_array[0, 0]) # 输出: 1 print(my_2d_array[1, :]) # 输出: [4 5 6] print(my_2d_array[:, 2]) # 输出: [3 6 9] ```

数组运算

NumPy 提供了丰富的数组运算功能,这些运算可以对数组中的所有元素执行。

  • **基本运算:** 加法、减法、乘法、除法等。
  • **元素级运算:** 对数组中的每个元素执行相同的运算。
  • **广播机制:** NumPy 可以自动将不同形状的数组进行运算,这种机制称为广播。
  • **通用函数:** NumPy 提供了一系列通用函数,例如 `numpy.sin()`、`numpy.cos()`、`numpy.exp()` 等,可以对数组中的每个元素执行这些函数。

```python import numpy as np

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]

  1. 广播机制

array3 = np.array([[1, 2], [3, 4]]) array4 = np.array([10, 20])

print(array3 + array4)

  1. 输出:
  2. [[11 22]
  3. [13 24]]

```

数组变形

数组变形是指改变数组的形状。

  • `numpy.reshape()`: 改变数组的形状。
  • `numpy.flatten()`: 将多维数组展平为一维数组。
  • `numpy.ravel()`: 将多维数组展平为一维数组,但返回的是原始数组的视图。

```python import numpy as np

my_array = np.arange(12)

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

flattened_array = reshaped_array.flatten() # 展平为一维数组 print(flattened_array)

raveled_array = reshaped_array.ravel() # 展平为一维数组,返回视图 print(raveled_array) ```

数组合并和分割

NumPy 提供了多种数组合并和分割的方法。

  • `numpy.concatenate()`: 沿着指定轴合并多个数组。
  • `numpy.vstack()`: 垂直合并数组。
  • `numpy.hstack()`: 水平合并数组。
  • `numpy.split()`: 沿着指定轴分割数组。
  • `numpy.hsplit()`: 水平分割数组。
  • `numpy.vsplit()`: 垂直分割数组。

```python import numpy as np

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

concatenated_array = np.concatenate((array1, array2), axis=0) # 垂直合并 print(concatenated_array)

hstack_array = np.hstack((array1, array2)) # 水平合并 print(hstack_array)

split_array = np.split(concatenated_array, 2) # 垂直分割为两个数组 print(split_array) ```

高级数组操作

  • **布尔索引:** 使用布尔数组来选择数组中的元素。
  • **花式索引:** 使用整数数组来选择数组中的元素。
  • **`numpy.where()`: ** 根据条件返回元素。

```python import numpy as np

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

bool_array = my_array > 2 print(bool_array) # 输出: [False False True True True]

print(my_array[bool_array]) # 输出: [3 4 5]

fancy_array = my_array0, 2, 4 # 使用花式索引 print(fancy_array) # 输出: [1 3 5]

print(np.where(my_array > 2, my_array, 0)) # 输出: [0 0 3 4 5] ```

NumPy 与金融分析

NumPy 在金融分析中有着广泛的应用,例如:

NumPy 的高效数组运算和丰富的数学函数使其成为金融数据分析的强大工具。

总结

本文介绍了 NumPy 数组的基本操作,包括创建、属性、索引切片、运算、变形、合并分割以及高级操作。掌握这些操作是进行科学计算和数据分析的基础。在金融领域,NumPy 可以帮助我们更有效地进行量化交易、风险管理和投资决策。 进一步学习NumPy的线性代数傅里叶变换随机数生成功能将极大地提升您的数据分析能力。

立即开始交易

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

加入我们的社区

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

Баннер