10  Numpy 基础 I

10.1 什么是NumPy

10.1.1 简介

NumPy(Numerical Python的简称)是Python中最重要的科学计算基础库。如果把Python比作一把瑞士军刀,那么NumPy就是其中最重要的工具之一。它能帮助我们高效地处理大量的数值数据。

Note

NumPy是在2005年由Travis Oliphant通过将Numeric和Numarray这两个已有的Python数组库整合在一起而创建的。现在它已经成为Python科学计算生态系统的核心。

10.1.2 为什么要学习NumPy?

10.1.2.1 更快的计算速度

让我们通过一个简单的例子来理解NumPy的优势:

import numpy as np
import time

# 创建一个包含10000个数的列表和数组
python_list = list(range(100000))
numpy_array = np.array(range(100000))

# 测试Python列表计算时间
start_time = time.time()
python_result = [x * 2 for x in python_list]
python_time = time.time() - start_time

# 测试NumPy数组计算时间
start_time = time.time()
numpy_result = numpy_array * 2
numpy_time = time.time() - start_time

print(f"Python列表计算时间: {python_time:.6f}秒")
print(f"NumPy数组计算时间: {numpy_time:.6f}秒")
Python列表计算时间: 0.002609秒
NumPy数组计算时间: 0.000521秒
Tip

NumPy之所以快,是因为它在底层使用C语言实现,并且对数据进行连续存储,这使得计算效率大大提高。

10.1.2.2 更方便的数学运算

假设我们要计算两组数据的平均值:

# Python列表方式
python_list1 = [1, 2, 3, 4, 5]
python_average = sum(python_list1) / len(python_list1)

# NumPy方式
numpy_array1 = np.array([1, 2, 3, 4, 5])
numpy_average = np.mean(numpy_array1)

print(f"Python计算平均值: {python_average}")
print(f"NumPy计算平均值: {numpy_average}")
Python计算平均值: 3.0
NumPy计算平均值: 3.0

10.1.2.3 强大的数组操作

NumPy的核心是其多维数组对象(ndarray):

# 创建一个2x3的数组
arr = np.array([[1, 2, 3],
                [4, 5, 6]])
print("数组的形状:", arr.shape)
print("数组的维度:", arr.ndim)
print("数组的大小:", arr.size)
数组的形状: (2, 3)
数组的维度: 2
数组的大小: 6

10.1.3 安装和环境配置

Note

在本次夏令营中,同学们使用的JupyterHub平台中NumPy已经预装好了,同学们无需再次安装。

10.1.3.1 使用pip安装

pip install numpy

10.1.3.2 使用conda安装

conda install numpy
Note

如果你使用Anaconda Python发行版,NumPy已经预装好了。

10.1.3.3 验证安装

import numpy as np
print(np.__version__)  # 查看NumPy版本
1.24.3

10.1.4 NumPy的基本概念

10.1.4.1 数组(Array)

  • NumPy的核心是n维数组对象
  • 所有元素必须是相同类型
  • 数组大小固定
# 创建一维数组
arr1d = np.array([1, 2, 3, 4])

# 创建二维数组
arr2d = np.array([[1, 2], [3, 4]])

print("一维数组:", arr1d)
print("二维数组:\n", arr2d)
一维数组: [1 2 3 4]
二维数组:
 [[1 2]
 [3 4]]

10.1.4.2 数组的属性

# 创建一个示例数组
arr = np.array([[1, 2, 3],
                [4, 5, 6]])

print("形状(shape):", arr.shape)      # 数组的维度
print("维度数(ndim):", arr.ndim)      # 数组的维数
print("数据类型(dtype):", arr.dtype)  # 数组的数据类型
print("元素个数(size):", arr.size)    # 数组的总元素个数
形状(shape): (2, 3)
维度数(ndim): 2
数据类型(dtype): int32
元素个数(size): 6

10.1.5 实际应用场景

10.1.5.1 科学计算

# 计算正弦值
angles = np.array([0, 30, 45, 60, 90])
radians = np.deg2rad(angles)  # 将角度转换为弧度
sin_values = np.sin(radians)
print("不同角度的正弦值:", sin_values)
不同角度的正弦值: [0.         0.5        0.70710678 0.8660254  1.        ]

10.1.5.2 数据分析

# 分析学生成绩
scores = np.array([85, 92, 77, 68, 90, 88, 95, 78])
print("平均分:", np.mean(scores))
print("中位数:", np.median(scores))
print("标准差:", np.std(scores))
平均分: 84.125
中位数: 86.5
标准差: 8.506431390424542

10.1.6 练习题

  1. 创建一个包含1到10的NumPy数组,并计算其平均值。
  2. 创建一个3x3的随机数组,并找出其中的最大值和最小值。
  3. 创建两个数组并进行基本运算(加、减、乘、除)。
学习建议
  1. 从简单的一维数组开始练习
  2. 多尝试NumPy的内置函数
  3. 结合实际问题来学习
  4. 注意观察运算结果的数据类型

10.2 小结

  • NumPy是Python科学计算的基础库
  • 它提供了高效的数组操作和丰富的数学函数
  • 相比Python列表,NumPy的计算速度更快
  • NumPy在数据分析、科学计算等领域有广泛应用
  • 掌握NumPy对于后续学习pandas、matplotlib等库很有帮助
Note

下一章我们将学习在NumPy中的标量与向量。