NumPy:从初识到实战,探索Python科学计算的无限可能

简介: NumPy:从初识到实战,探索Python科学计算的无限可能

NumPy

在浩瀚的Python编程世界中,有一个强大的库如星辰般璀璨,它是数据科学家、机器学习工程师乃至量化金融分析师手中的利器——NumPy,它以其高效的数据处理能力和便捷的矩阵运算机制,在科研与工程领域中占据着举足轻重的地位。

一、NumPy初识:基石的力量

NumPy(Numerical Python)是Python中最核心的科学计算库之一,提供了一系列高级数学函数,以及对多维数组和矩阵的强大支持。它的基础数据结构numpy.ndarray为海量数据的存储和操作提供了极高的效率,并且无缝对接其他深度学习框架,如TensorFlow、PyTorch等,奠定了Python在数据分析与科学计算领域的基础地位。

二、NumPy功能:领略高效魅力

  1. 快速创建和操作数组:通过简单的API,我们可以轻松创建各种类型的数组,进行元素级操作、统计分析、排序、索引切片等任务,大大提升了开发效率。
  2. ndarray对象:NumPy的核心是一个名为numpy.ndarray的N维数组对象,它支持各种数据类型,并且高效地存储和操作同构数据集合。
  3. 高效的数组运算:NumPy中的数组支持快速的元素级数学运算、逻辑运算以及广播机制,能够以接近C语言的速度进行大规模数据处理。
  4. 矩阵运算:提供对矩阵的各种操作,如加减乘除、转置、求逆、解线性方程组、特征值分解、奇异值分解等。
  5. 数组索引与切片:类似于Python原生列表,但更加灵活,支持高级索引和花式索引。
  6. 统计函数:包含一系列统计学相关函数,例如求和、平均、中位数、标准差、最大值、最小值等。
  7. 排序和筛选:可以对数组进行排序,同时支持条件筛选操作。
  8. 形状变换:允许改变数组的维度和大小,包括reshape、flatten、squeeze、expand_dims等操作。
  9. 文件I/O:支持从磁盘读写多种格式的数据,如二进制、文本或图像文件。
  10. 随机数生成:内置了多个分布的随机数生成器,便于模拟和概率统计实验。

三、NumPy实战:计算最强大脑

创建数组

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

数组运算

result = arr1 + arr2

数学函数

result = np.sin(arr)

统计功能

mean = np.mean(arr)

随机数生成

random_arr = np.random.rand(5)

形状操作

reshaped_arr = arr.reshape(1, 4)

索引和切片

sub_arr = arr[2:4]

线性代数运算

result = np.dot(matrix1, matrix2)

数组拼接

concatenated_arr = np.concatenate((arr1, arr2))

数组重复

repeated_arr = np.repeat(arr, 3)

数组排序

sorted_arr = np.sort(arr)

布尔索引

bool_indexing_arr = arr[arr > 3]

数组转置

transposed_arr = arr.T

数组填充

filled_arr = np.full((3, 3), 5)

数组切割

split_arr = np.split(arr, 3)

实例1

import numpy as np
# 创建一个2D数组(矩阵)
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix)
# 对数组进行转置操作
transpose = matrix.T
print(transpose)
# 计算矩阵的行和列的总和
row_sums = np.sum(matrix, axis=1)
col_sums = np.sum(matrix, axis=0)
print(row_sums, col_sums)

实例2

import numpy as np  
# 创建一个NumPy数组  
arr = np.array([5, 2, 8, 1, 9])  
# 对数组进行排序  
sorted_arr = np.sort(arr)  
print("排序后的数组:", sorted_arr)  
# 获取排序后数组的索引  
index = np.argsort(arr)  
print("排序后数组的索引:", index)

实例3

import numpy as np
# 创建一串随机数并计算统计指标
data = np.random.randn(1000)  # 创建一个标准正态分布的随机数组
mean = np.mean(data)  # 计算平均值
median = np.median(data)  # 计算中位数
std_dev = np.std(data)  # 计算标准差
print(f"Mean: {mean}")
print(f"Median: {median}")
print(f"Standard Deviation: {std_dev}")

实例4

import numpy as np
# 创建系数矩阵和常数向量
A = np.array([[2, 1], [1, 3]])
b = np.array([8, 6])
# 使用numpy.linalg.solve求解Ax=b
solution = np.linalg.solve(A, b)
print(solution)

实例5

import numpy as np
# 创建两个NumPy矩阵  
A = np.array([[1, 2], [3, 4]])  
B = np.array([[5, 6], [7, 8]])  
# 进行矩阵加法、减法和乘法运算  
C = A + B  
D = A - B  
E = np.dot(A, B)  
print("矩阵加法结果:\n", C)  
print("矩阵减法结果:\n", D)  
print("矩阵乘法结果:\n", E)

实例6

from PIL import Image
import numpy as np
# 加载图片为numpy数组
img = Image.open("image.jpg")
img_array = np.array(img)
# 图像灰度化
gray_img = np.dot(img_array[...,:3], [0.299, 0.587, 0.114])
gray_img = gray_img.astype(np.uint8)
# 将灰度图保存回文件
Image.fromarray(gray_img).save("gray_image.jpg")

实例7

np.random.rand(): 返回一个在 [0, 1) 之间的随机浮点数。
np.random.randint(low, high, size): 返回一个指定范围内的随机整数数组。
np.random.randn(d0, d1, ..., dn): 返回一个或多个标准正态分布的随机数数组。
np.random.random(size): 返回一个随机浮点数数组,其值在 [0, 1) 之间。
np.random.choice(a, size, replace=True, p=None): 从数组 a 中随机选择元素,或者使用概率 p 进行选择。
np.random.shuffle(x): 将数组 x 的元素顺序随机打乱。
np.random.permutation(x): 返回数组 x 的随机排列
# 除了这些与标准库并不多的,另外还有近30个各种抽取样本的np.random库函数


目录
相关文章
|
6天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
40 6
|
6天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
78 44
|
2天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
7 1
|
2天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
9 1
|
4天前
|
Linux 开发者 iOS开发
Python系统调用实战:如何在不同操作系统间游刃有余🐟
本文介绍了 Python 在跨平台开发中的强大能力,通过实际例子展示了如何使用 `os` 和 `pathlib` 模块处理文件系统操作,`subprocess` 模块执行外部命令,以及 `tkinter` 创建跨平台的图形用户界面。这些工具和模块帮助开发者轻松应对不同操作系统间的差异,专注于业务逻辑。
17 2
|
6天前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
17 3
|
7天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
26 4
|
3天前
|
开发者 Python
探索Python中的装饰器:从入门到实战
【10月更文挑战第30天】本文将深入浅出地介绍Python中一个强大而有趣的特性——装饰器。我们将通过实际代码示例,一步步揭示装饰器如何简化代码、增强函数功能并保持代码的可读性。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往更高效编程的大门。
|
6天前
|
网络协议 调度 开发者
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第27天】本文介绍了Python网络编程中的Twisted框架,重点讲解了其异步IO处理机制。通过反应器模式,Twisted能够在单线程中高效处理多个网络连接。文章提供了两个实战示例:一个简单的Echo服务器和一个HTTP服务器,展示了Twisted的强大功能和灵活性。
17 0
|
Python 开发者
Python探索记(02)——变量
Python中常见变量如下: 在Python开发中,只要定义了一个变量,那么它所对应的类型就已被系统确定了;不需要开发者主动声明其类型,系统会自动识别。
813 0