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

news2025/2/24 2:54:22

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库函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1383925.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

寄快递有没有什么省钱的小妙招? 怎样寄快递才能省钱呢?

快递物流行业的快速崛起刺激了人们的消费欲望,其中典型的是每每到重大节日尤其是双十一或者双十二,消费市场异常火爆,这也使得快递行业加班加点的干也不追不上人们下单的速度。如今,互联网时代崛起,网购成为了大家最寻…

码农的周末日常---一月的第二周

上周总结 开发任务按规划完成 参加新版本的需求分析会议,基本了解新功能的实现 开始阅读一本新书《Head first Java》 2024/01/13 天气晴 温度适宜 蓝蓝的天,暖暖的阳光,不晒鞋可惜了,赶紧掏出我那正宗莆田和anta晒…

高级分布式系统-第12讲 分布式控制经典理论

控制器基础 分布式控制系统的设计,是指在给定系统性能指标的条件下,设计出控制器的控制规律和相应的数字控制算法。 PID控制器 根据偏差的比例(Proportional)、积分(Integral)、微分(Derivati…

MATLAB R2023a安装教程

鼠标右击软件压缩包,选择“解压到MATLAB.R2023a”。 打开解压后的文件夹,鼠标右击“R2023a_Windows_iso”选择“装载”。 鼠标右击“setup.exe”选择“以管理员身份运行”。 点击“高级选项”选择“我有文件安装密钥”。 点击“是”,然后点击…

steam搬砖项目赚钱吗?低门槛副业月入5k真的假的?

steam搬砖项目一开始默默无闻,现在越来越受欢迎,因为大家都看到了该项目的长期稳定性。 steam搬砖项目主要是搬csgo游戏装备和道具,从steam购买,在网易Buff上出售,赚取差价。只需少量投资,即可获得长期稳定…

【线性表的基本操作实现及其应用 】

线性表的基本操作实现及其应用 1.实验目的 ⑴ 熟练掌握线性表的基本操作在两种存储结构上的实现,其中以熟悉各种链表的操作为重点。 ⑵ 巩固高级语言程序设计方法与技术,会用线性链表解决简单的实际问题。 2.实验原理与要求 ⑴ 按照数据结构实验任务书&…

Docker安装Elasticsearch8详细步骤

前面讲了Elasticsearch7的安装步骤,今天讲讲Elasticsearch8的安装,大同小异。 1、配置环境变量 .env 文件设置运行 docker-compose.yml 配置文件时使用的环境变量。 确保使用 ELASTIC_PASSWORD 和 KIBANA_PASSWORD 变量为 elastic 和 kibana_system 用…

Python——函数的参数

1.位置参数 位置参数可以在函数中设置一个或者多个参数,但是必须有对应个数的值传入该函数才能成功调用,例如: def power(x):return x*xprint(powr(5)) 如果传入的值与对应函数设置的位置参数不符合,则会报错: Traceba…

《优化接口设计的思路》系列:第七篇—接口限流策略

系列文章导航 第一篇—接口参数的一些弯弯绕绕 第二篇—接口用户上下文的设计与实现 第三篇—留下用户调用接口的痕迹 第四篇—接口的权限控制 第五篇—接口发生异常如何统一处理 第六篇—接口防抖(防重复提交)的一些方式 第七篇—接口限流策略 本文参考项目源码地址&#xff…

【EAI 006】ChatGPT for Robotics:将 ChatGPT 应用于机器人任务的提示词工程研究

论文标题:ChatGPT for Robotics: Design Principles and Model Abilities 论文作者:Sai Vemprala, Rogerio Bonatti, Arthur Bucker, Ashish Kapoor 作者单位:Scaled Foundations, Microsoft Autonomous Systems and Robotics Research 论文原…

第六站:C++面向对象

面向对象的第一概念:类 类的构成: “类”,是一种特殊的“数据类型”,不是一个具体的数据。 类的设计: 创建一个类: class Human { public://公有的,对外的void eat();//方法,成员函数void sleep();void play();void work();string getName();//获取对内…

元素、物质、原子、分子之间的关系。

问题描述:元素、物质、原子、分子之间的关系。 问题解答: 首先,元素是具有相同核电荷数的同一类原子的总称。例如,氢元素包含所有质子数为1的原子。 其次,物质是由元素组成的。物质可以由单一的元素构成&#xff0c…

【书生·浦语】大模型实战营——第五课作业

教程文档:https://github.com/InternLM/tutorial/blob/vansin-patch-4/lmdeploy/lmdeploy.md#tritonserver-%E6%9C%8D%E5%8A%A1%E4%BD%9C%E4%B8%BA%E5%90%8E%E7%AB%AF 视频链接: 作业: 基础作业 使用如下命令创建conda环境 conda create…

【python入门】day28:记录用户登录日志

演示 代码 #-*- coding:utf-8 -*- print(记录用户登录日志----------------------------) import time def show_info():print(输入提示数字,执行相应操作:0退出,1查看登录日志) def write_logininfo(username):#----------记录日志with open(log.txt,a,encodingutf-8)as file…

基于SSM的网上订餐管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

Unity中图片合成图集Editor工具

一般图片合成图集用的是Unity自带的SpriteAtlas类添加一个Sprite集合,而所有图片保存在Sprite集合中,然后把Sprite通过Add方法添加到SpriteAtlas类,通过AssetDatabase.CreateAsset()方法来创建图集。

希尔排序和计数排序

📑前言 本文主要是【排序】——希尔排序、计数排序的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句…

Arduino开发实例-HW-M10 微波雷达运动传感器

HW-M10 微波雷达运动传感器 文章目录 HW-M10 微波雷达运动传感器1、HW-M10 微波雷达运动传感器介绍2、硬件准备及接线3、代码实现1、HW-M10 微波雷达运动传感器介绍 HW-M10 微波传感器模块非常准确,广泛用于报警和安全系统中的运动检测。 该模块与 PIR 模块一样,可以检测任何…

LINUX——动/静态库

加油加油~ 目录: 动/静态库是什么? .o文件是什么? 以gcc编译器为例,查看xxx.i xxx.s xxx.o文件 生成test.i文件(预处理) 生成test.s文件(编译) 生成test.o文件(汇编) 生成可执行程序(链接): 小结&#xff1a…

Unity与Android交互通信系列(4)

上篇文章我们实现了模块化调用,运用了模块化设计思想和简化了调用流程,本篇文章讲述UnityPlayerActivity类的继承和使用。 在一些深度交互场合,比如Activity切换、程序启动预处理等,这时可能会需要继承Application和UnityPlayerAc…