NumPy 简介与安装

NumPy 简介与安装

目录


NumPy 简介

NumPy(Numerical Python)是 Python 中用于科学计算的基础库,提供了高性能的多维数组对象和工具。

主要特点

  1. 多维数组对象:ndarray,高效存储和操作多维数据
  2. 数学函数库:大量数学、统计和线性代数函数
  3. 广播机制:对不同形状数组进行运算
  4. C/C++ 集成:底层用 C 实现,性能高效
  5. 广泛支持:许多科学计算库的基础

为什么使用 NumPy?

python 复制代码
# Python 列表运算(慢)
python_list = [1, 2, 3, 4, 5]
result = [x * 2 for x in python_list]
print(result)  # [2, 4, 6, 8, 10]

# NumPy 数组运算(快)
import numpy as np
numpy_array = np.array([1, 2, 3, 4, 5])
result = numpy_array * 2
print(result)  # [2 4 6 8 10]

NumPy 的优势

1. 性能优势

python 复制代码
import numpy as np
import time

# 创建大数据集
size = 1000000
python_list = list(range(size))
numpy_array = np.arange(size)

# Python 列表运算时间
start = time.time()
result1 = [x * 2 for x in python_list]
time1 = time.time() - start

# NumPy 数组运算时间
start = time.time()
result2 = numpy_array * 2
time2 = time.time() - start

print(f"Python 列表: {time1:.6f} 秒")
print(f"NumPy 数组: {time2:.6f} 秒")
print(f"NumPy 快 {time1/time2:.0f} 倍")

2. 内存效率

python 复制代码
import numpy as np
import sys

# Python 列表内存占用
python_list = [1, 2, 3, 4, 5]
print(f"Python 列表内存: {sys.getsizeof(python_list)} 字节")

# NumPy 数组内存占用
numpy_array = np.array([1, 2, 3, 4, 5])
print(f"NumPy 数组内存: {numpy_array.nbytes} 字节")
print(f"NumPy 节省内存: {(sys.getsizeof(python_list) - numpy_array.nbytes) / sys.getsizeof(python_list) * 100:.1f}%")

3. 丰富的功能

NumPy 提供了丰富的数学和科学计算功能,无需自己实现。


安装 NumPy

方法 1:使用 pip(推荐)

bash 复制代码
pip install numpy

方法 2:使用 conda

bash 复制代码
conda install numpy

方法 3:从源码安装

bash 复制代码
git clone https://github.com/numpy/numpy.git
cd numpy
python setup.py install

安装特定版本

bash 复制代码
# 安装特定版本
pip install numpy==1.24.0

# 安装最新版本
pip install --upgrade numpy

验证安装

检查版本

python 复制代码
import numpy as np

# 查看 NumPy 版本
print(f"NumPy 版本: {np.__version__}")

# 查看配置信息
print(np.show_config())

基本测试

python 复制代码
import numpy as np

# 创建数组
arr = np.array([1, 2, 3, 4, 5])
print(f"创建的数组: {arr}")
print(f"数组类型: {type(arr)}")
print(f"数组形状: {arr.shape}")
print(f"数组维度: {arr.ndim}")
print(f"数组数据类型: {arr.dtype}")

# 基本运算
print(f"数组求和: {arr.sum()}")
print(f"数组平均值: {arr.mean()}")
print(f"数组最大值: {arr.max()}")
print(f"数组最小值: {arr.min()}")

基本使用示例

示例 1:创建和操作数组

python 复制代码
import numpy as np

# 创建一维数组
arr1d = np.array([1, 2, 3, 4, 5])
print(f"一维数组: {arr1d}")

# 创建二维数组
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
print(f"\n二维数组:\n{arr2d}")

# 数组运算
print(f"\n数组乘以 2:\n{arr1d * 2}")
print(f"\n数组平方:\n{arr1d ** 2}")

示例 2:数组属性

python 复制代码
import numpy as np

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

print(f"数组:\n{arr}")
print(f"形状: {arr.shape}")      # (2, 3)
print(f"维度: {arr.ndim}")        # 2
print(f"大小: {arr.size}")        # 6
print(f"数据类型: {arr.dtype}")    # int64
print(f"元素大小: {arr.itemsize}") # 8 字节
print(f"总内存: {arr.nbytes}")     # 48 字节

示例 3:数学运算

python 复制代码
import numpy as np

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

print(f"数组 a: {a}")
print(f"数组 b: {b}")
print(f"加法: {a + b}")
print(f"减法: {a - b}")
print(f"乘法: {a * b}")
print(f"除法: {a / b}")
print(f"幂运算: {a ** 2}")
print(f"点积: {np.dot(a, b)}")

示例 4:数组统计

python 复制代码
import numpy as np

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

print(f"数组: {arr}")
print(f"求和: {arr.sum()}")
print(f"平均值: {arr.mean()}")
print(f"中位数: {np.median(arr)}")
print(f"标准差: {arr.std()}")
print(f"方差: {arr.var()}")
print(f"最大值: {arr.max()}")
print(f"最小值: {arr.min()}")
print(f"最大值位置: {arr.argmax()}")
print(f"最小值位置: {arr.argmin()}")

总结

NumPy 是 Python 科学计算的基础库:

  1. 高性能:比纯 Python 快得多
  2. 内存高效:比列表占用更少内存
  3. 功能丰富:大量数学和科学计算函数
  4. 易于使用:简洁的 API

相关推荐
brave and determined2 天前
CANN教程:NPU原生NumPy接口asnumpy详解引言
numpy
啊阿狸不会拉杆2 天前
《机器学习导论》第 5 章-多元方法
人工智能·python·算法·机器学习·numpy·matplotlib·多元方法
铁手飞鹰3 天前
[深度学习]常用的库与操作
人工智能·pytorch·python·深度学习·numpy·scikit-learn·matplotlib
啊阿狸不会拉杆3 天前
《机器学习导论》第3章 -贝叶斯决策理论
人工智能·python·算法·机器学习·numpy·深度优先·贝叶斯决策理论
林深现海3 天前
【刘二大人】PyTorch深度学习实践笔记 —— 第四集:反向传播(凝练版)
pytorch·python·numpy
断眉的派大星3 天前
NumPy库完全解析(从基础到进阶,附实战示例)
numpy
啊阿狸不会拉杆4 天前
《机器学习导论》第 1 章 - 引言
人工智能·python·算法·机器学习·ai·numpy·matplotlib
Dfreedom.4 天前
详解四大格式(PIL/OpenCV/NumPy/PyTorch)的转换原理与场景选择
图像处理·人工智能·pytorch·opencv·numpy·pillow
不懒不懒4 天前
【机器学习:下采样 VS 过采样——逻辑回归在信用卡欺诈检测中的实践】
python·numpy·scikit-learn·matplotlib·pip·futurewarning
小白开始进步4 天前
JAKA Zu12 机械臂运动学算法深度解析(含可视化方案)
python·算法·numpy