当前位置: 首页 > article >正文

大二下期末

一.Numpy(Numerical Python)

Numpy库是Python用于科学计算的基础包,也是大量Python数学和科学计算包的基础。不少数据处理和分析包都是在Numpy的基础上开发的,如后面介绍的Pandas包。

Numpy的核心基础是ndarray(N-dimensional array ,n维数组),即由数据类型相同的元素组成N维数组。

1.创建数组

1.利用array函数创建

import numpy as np
d1 = [1,2,3,4,0.1,7]
d2 = (1,3,5,7,9)
d3 = [(1,2),(3,4),[5,6]]
n1 = np.array(d1)
n2 = np.array(d2)
n3 = np.array(d3)
print(n1)
print(n2)
print(n3)

输出:

[1.  2.  3.  4.  0.1 7. ]
[1 3 5 7 9]
[[1 2]
 [3 4]
 [5 6]]

print(n1.dtype)
print(n2.dtype)
print(n3.dtype)

输出:

float64
int64
int64

可以看出数组n1中的数据类型是浮点数,这是因为numpy会进行类型强制转换,转换规则为:str > float > int     只要原始数据中有一个类型“较高级”的数据,由这个原始数据创建的数组里面的元素就会开始强制转换类型

float64是一种浮点数类型,表示双精度浮点数,它占用64位(8字节)的存储空间

int64是一种整数类型,表示64位有符号整数。用于存储整数,能够表示的整数的范围为负2的63次方到正2的63次方减一,适用于需要处理较大范围的整数场景

还有其他的类型可以上网查(感叹现在的artifical intelligence)

另外有一个类型值得注意:object类型,称为对象类型,可以存储任何Python对象

2.利用内置函数创建数组

import numpy as np
z1 = np.zeros((3,4))
z2 = np.ones((2,3))
z3 = np.arange(1,10)
z4 = np.arange(1,10,2)
z5 = np.arange(10)

输出:(省略了print)

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[1. 1. 1.]
 [1. 1. 1.]]
[1 2 3 4 5 6 7 8 9]
[1 3 5 7 9]
[0 1 2 3 4 5 6 7 8 9]

2.数组的属性

1. ndarray.shape

表示数组的维度大小(形状),返回一个元组,其中每一个元素对应了一个维度的大小

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)  

输出:(2,3)

2.ndarray.ndim

用于获取数组的维度(dimension)

3.ndarray.size

表示数组中元素总个数

4.ndarray.dtype

表示数组中的元素类型

5.ndarray,itemsiez

表示数组中每个元素所占的字节数

print(arr.itemsize)

输出:8

6.ndarray.nbytes

表示数组占用的字节总数

print(arr.nbytes)

输出:48

7.ndarray.T

表示数组的转置(行变成列,列变成行)

8.ndarray.real

获取数组中元素的实部

9.ndarray.imag

获取数组中元素的虚部

10.ndarray.flags  ndarray.strides  ndarray.data

这三个属性不常用,用到了再了解

3.数组的reshape函数

reshape本身就有重塑,改造的意思(shape 形状,塑造)

reshape函数用于在不改变数组数据的情况下,重新调整数组的形状,只要新形状的总数据量和原来形状的总数据量一致就行

在reshape方法中,-1参数可以让Numpy自动计算维度的大小,即根据数组中元素的总个数和其他维度的大小自动推导出该维度的大小。注意:当使用reshape方法时,只有一个维度大小可以设置成-1

4.数组中的视图(view)和副本(copy)

在Numpy中,视图和副本是是两种不同的数组操作方式,它们在数据存储和内存管理上有显著的区别

1.视图(view)

视图是原数组的一种“窗口”,它并不创建新的数据存储,而是直接引用原数组的内存,对视图的修改会直接影响原数组

1.视图创建方式

使用切片操作[:]

使用reshape方法

使用transpose方法(转置)

2.视图的特点

不会占用额外的内存空间

修改视图中的数据会影响到原数组中的数据

import numpy as nparr = np.array([1, 2, 3, 4, 5, 6])
view = arr.reshape((2, 3))  # 创建视图print("Original array:", arr)
print("View array:", view)# 修改视图
view[0, 0] = 100print("Modified original array:", arr)
print("Modified view array:", view)

输出:

Original array: [1 2 3 4 5 6]
View array: [[1 2 3]
             [4 5 6]]
Modified original array: [100   2   3   4   5   6]
Modified view array: [[100   2   3]
                      [  4   5   6]]

2.副本(copy)

副本是原数组的一个完整拷贝,它在内存中创建了新的数据存储。对副本的修改不会影响原数组

1.副本的创建方式

使用.copy()方法

import numpy as nparr = np.array([1, 2, 3, 4, 5, 6])
copy = arr.reshape((2, 3)).copy()  # 创建副本print("Original array:", arr)
print("Copy array:", copy)# 修改副本
copy[0, 0] = 100print("Modified original array:", arr)
print("Modified copy array:", copy)

输出:

Original array: [1 2 3 4 5 6]
Copy array: [[1 2 3]
             [4 5 6]]
Modified original array: [1 2 3 4 5 6]
Modified copy array: [[100   2   3]
                      [  4   5   6]]

3.如何判断一个数组是视图还是副本

使用ndarray.flags属性

如果OWNDATA=True 表示数组是副本,拥有自己的内存

如果OWNDATA=False 表示数组是视图,引用了其他数组的内存

5.可以使用astype方法修改数组的数据类型

ndarray.astype(dtype)

其中dtype表示要转换的数据类型

6.数组运算

基础的加减乘除乘方就不说了

np.srqt(ndarray)

np.abs(ndarray)

np.cos(ndarray)

np.sin(ndarray)

np.exp(ndarray)

7.数组的切片

看前面的文章

8.数组的连接

1.numpy.concatenate()

参数axis=0表示垂直拼接,axis=1表示水平拼接

2.numpy.vstack()

Vertical 垂直的

3.numpy.hstack()

Horizontal 水平的

注意:水平连接要求数组之间行数一致,垂直连接要求数组之间列数一致

import numpy as npnp.random.seed(42) # 设置随机数种子
n1 = np.random.randint(1,10,size=(2,3))
n2 = np.random.randint(2,20,size=(3,3))
n3 = np.random.randint(3,30,size=(2,4))print(np.concatenate((n1,n2),axis=0)) # 垂直拼接
print(np.concatenate((n1,n3),axis=1)) # 水平拼接

输出:

[[ 7  4  8]
 [ 5  7  3]
 [12 12  5]
 [ 9  4  3]
 [13  7  3]]
[[ 7  4  8 23  3 14 28]
 [ 5  7  3 24 14 27 19]]

print(np.vstack([n1,n2])) # 垂直拼接
print(np.hstack((n1,n3))) # 水平拼接

输出:

[[ 7  4  8]
 [ 5  7  3]
 [12 12  5]
 [ 9  4  3]
 [13  7  3]]
[[ 7  4  8 23  3 14 28]
 [ 5  7  3 24 14 27 19]]

9.数组形态的转换

1.numpy.ravel()

将多维数组展平成一维数组

ravel_n1 = np.ravel(n1) # 展平
print(ravel_n1)

输出:

[7 4 8 5 7 3]

2.numpy.flatten()

将多维数组展平成一维数组

flatten_n2 = n2.flatten()
print(flaten_n2)

输出:

[12 12  5  9  4  3 13  7  3]

3.ndarray.reshape(-1)

reshape_n3 = n3.reshape(-1)
print(reshape_n3)  # 展平,-1表示自动计算维度

输出:

[23  3 14 28 24 14 27 19]

二.Pandas

Pandas是基于Numpy开发的一个Python包。Pandas作为Python数据分析的核心包,提供了大量数据分析的函数,包括数据处理,数据抽取,数据集成,数据计算等基本数据分析手段。

Pandas核心数据结构包括序列和数据框。序列存储一维数据,而数据框可以存储更复杂的多维数据

1.数据框DataFrame的拼接

1.concat函数

import pandas as pd
import numpy as np
np.random.seed(42)
df1 = pd.DataFrame(data=np.random.randint(1,10,size=(3,2)))
df2 = pd.DataFrame(data=np.random.randint(1,10,size=(3,4)))
df3 = pd.DataFrame(data=np.random.randint(1,10,size=(4,2)))
print(df1)
print()
print(df2)
print()
print(df3)# 按列拼接,axis=1,即按列对齐,也就是列索引对齐,还可以理解为横向拼接
print(pd.concat([df1,df2],axis=1))
print()
print(pd.concat([df1,df2],axis=1,ignore_index=True))  # 忽略索引,重新生成索引
print()
# 按行拼接,axis=0,即按行对齐,也就是行索引对齐,还可以理解为纵向拼接
print(pd.concat([df1,df3],axis=0))

输出:

  0  1
0  7  4
1  8  5
2  7  3

   0  1  2  3
0  7  8  5  4
1  8  8  3  6
2  5  2  8  6

   0  1
0  2  5
1  1  6
2  9  1
3  3  7
   0  1  0  1  2  3
0  7  4  7  8  5  4
1  8  5  8  8  3  6
2  7  3  5  2  8  6

   0  1  2  3  4  5
0  7  4  7  8  5  4
1  8  5  8  8  3  6
2  7  3  5  2  8  6

   0  1
0  7  4
1  8  5
2  7  3
0  2  5
1  1  6
2  9  1
3  3  7

到现在,对一些函数的参数axis有了一点新的理解:

axsi=0,表示对行进行操作,比如使用concat函数时设置axis=0表示按行拼接,就是把数据一行一行接上去,即垂直连接

axis=1则表示对列进行操作,使用concat函数时设置axis=1表示按列拼接,就是把数据一列一列接上去,即水平连接

相关文章:

大二下期末

一.Numpy(Numerical Python) Numpy库是Python用于科学计算的基础包,也是大量Python数学和科学计算包的基础。不少数据处理和分析包都是在Numpy的基础上开发的,如后面介绍的Pandas包。 Numpy的核心基础是ndarray(N-di…...

LeetCode 热题 100 74. 搜索二维矩阵

LeetCode 热题 100 | 74. 搜索二维矩阵 大家好,今天我们来解决一道经典的算法题——搜索二维矩阵。这道题在 LeetCode 上被标记为中等难度,要求我们在一个满足特定条件的二维矩阵中查找一个目标值。如果目标值在矩阵中,返回 true&#xff1b…...

解决 VSCode 中无法识别 Node.js 的问题

当 VSCode 无法识别 Node.js 时,通常会出现以下症状: 代码提示缺失require 等 Node.js API 被标记为错误调试功能无法正常工作终端无法运行 Node.js 命令 常见原因及解决方案 1. Node.js 未安装或未正确配置 ​​解决方法​​: 确保已安…...

Mysql的卸载与安装

确保卸载干净mysql 不然在进行mysal安装时候会出现不一的页面和问题 1、卸载 在应用页面将查询到的mysql相关应用卸载 2、到c盘下将残留的软件包进行数据删除 3、删除programData下的mysql数据 4、检查系统中的mysql是否存在 cmd中执行 sc deleted mysql80 5、删除注册表中的…...

ES101系列09 | 运维、监控与性能优化

本篇文章主要讲解 ElasticSearch 中 DevOps 与性能优化的内容,包括集群部署最佳实践、容量规划、读写性能优化和缓存、熔断器等。 集群部署最佳实践 在生产环境中建议设置单一角色的节点。 Dedicated master eligible nodes:负责集群状态的管理。使用…...

Java常用的判空方法

文章目录 Java常用的判空方法JDK 自带的判空方法1. 使用 或 ! 运算符2. 使用 equals 方法3. Objects.isNull / Objects.nonNull4. Objects.equals4. JDK8 中的 Optional 第三方工具包1. Apache Commons Lang32. Google Guava3. Lombok 注解4. Vavr(函数式风格&…...

Excel处理控件Aspose.Cells教程:使用 C# 在 Excel 中创建组合图表

可视化项目时间线对于有效规划和跟踪至关重要。在本篇教程中,您将学习如何使用 C# 在 Excel 中创建组合图。只需几行代码,即可自动生成动态、美观的组合图。无论您是在构建项目管理工具还是处理内部报告,本指南都将向您展示如何将任务数据转换…...

【多线程初阶】阻塞队列 生产者消费者模型

文章目录 一、阻塞队列二、生产者消费者模型(一)概念(二)生产者消费者的两个重要优势(阻塞队列的运用)1) 解耦合(不一定是两个线程之间,也可以是两个服务器之间)2) 削峰填谷 (三)生产者消费者模型付出的代价 三、标准库中的阻塞队列(一)观察模型的运行效果(二)观察阻塞效果1) 队…...

《100天精通Python——基础篇 2025 第5天:巩固核心知识,选择题实战演练基础语法》

目录 一、踏上Python之旅二、Python输入与输出三、变量与基本数据类型四、运算符五、流程控制 一、踏上Python之旅 1.想要输出 I Love Python,应该使用()函数。 A.printf() B.print() C.println() D.Print() 在Python中想要在屏幕中输出内容,应该使用print()函数…...

机器人夹爪的选型与ROS通讯——机器人抓取系统基础系列(六)

文章目录 前言一、夹爪的选型1.1 任务需求分析1.2 软体夹爪的选型 二、夹爪的ROS通讯2.1 夹爪的通信方式介绍2.2 串口助手测试2.3 ROS通讯节点实现 总结Reference: 前言 本文将介绍夹爪的选型方法和通讯方式。以鞋子这类操作对象为例,将详细阐述了对应的夹爪选型过…...

第二十八章 RTC——实时时钟

第二十八章 RTC——实时时钟​​​​​​​ 目录 第二十八章 RTC——实时时钟 1 RTC实时时钟简介 2 RTC外设框图剖析 3 UNIX时间戳 4 与RTC控制相关的库函数 4.1 等待时钟同步和操作完成 4.2 使能备份域涉及RTC配置 4.3 设置RTC时钟分频 4.4 设置、获取RTC计数器及闹钟 5 实时时…...

使用 DuckLake 和 DuckDB 构建 S3 数据湖实战指南

本文介绍了由 DuckDB 和 DuckLake 组成的轻量级数据湖方案,旨在解决传统数据湖(如HadoopHive)元数据管理复杂、查询性能低及厂商锁定等问题。该方案为中小规模数据湖场景提供了简单、高性能且无厂商锁定的替代选择。 1. 什么是 DuckLake 和 D…...

大语言模型提示词(LLM Prompt)工程系统性学习指南:从理论基础到实战应用的完整体系

文章目录 前言:为什么提示词工程成为AI时代的核心技能一、提示词的本质探源:认知科学与逻辑学的理论基础1.1 认知科学视角下的提示词本质信息处理理论的深层机制图式理论的实际应用认知负荷理论的优化策略 1.2 逻辑学框架下的提示词架构形式逻辑的三段论…...

如何基于Mihomo Party http端口配置git与bash命令行代理

如何基于Mihomo Party http端口配置git与bash命令行代理 1. 确定Mihomo Party http端口配置 点击内核设置后即可查看 默认7892端口,开启允许局域网连接 2. 配置git代理 配置本机代理可以使用 127.0.0.1 配置局域网内其它机代理需要使用本机的非回环地址 IP&am…...

CMake 为 Debug 版本的库或可执行文件添加 d 后缀

在使用 CMake 构建项目时,我们经常需要区分 Debug 和 Release 构建版本。一个常见的做法是为 Debug 版本的库或可执行文件添加后缀(如 d),例如 libmylibd.so 或 myappd.exe。 本文将介绍几种在 CMake 中实现为 Debug 版本自动添加 d 后缀的方法。 方法一:使用 CMAKE_DEBU…...

Linux 特殊权限位详解:SetUID, SetGID, Sticky Bit

Linux 特殊权限位详解:SetUID, SetGID, Sticky Bit 在Linux权限系统中,除了基本的读、写(w)、执行(x)权限外,还有三个特殊权限位:SetUID、SetGID和Sticky Bit。这些权限位提供了更精细的权限控制机制,尤其在需要临时提升权限或管理共享资源时非常有用。 一、SetUID (s位…...

埃文科技智能数据引擎产品入选《中国网络安全细分领域产品名录》

嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,埃文科技智能数据引擎产品成功入选数据分级分类产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解这一蓬勃发展的产业格局,嘶吼安全产业…...

使用VTK还是OpenGL集成到qt程序里哪个好?

在Qt程序中集成VTK与OpenGL:选择哪个更好? 在Qt程序中实现三维可视化时,开发者常常面临一个选择:是使用VTK(Visualization Toolkit)还是OpenGL(Open Graphics Library)。这两种技术…...

Java-IO流之打印流详解

Java-IO流之打印流详解 一、打印流概述1.1 什么是打印流1.2 打印流的特点1.3 打印流的应用场景 二、PrintStream详解2.1 基本概念2.2 构造函数2.3 核心方法2.4 使用示例 三、PrintWriter详解3.1 基本概念3.2 构造函数3.3 核心方法3.4 使用示例 四、PrintStream与PrintWriter的比…...

高效图像处理:使用 Pillow 进行格式转换与优化

高效图像处理:使用 Pillow 进行格式转换与优化 1. 背景引入 在图像处理应用中,格式转换、裁剪、压缩等操作是常见需求。Python 的 Pillow 库基于 PIL(Python Imaging Library),提供 轻量、强大 的图像处理能力,广泛用于 Web 开发、数据分析、机器学习 等领域。 本文将…...

Github 2025-06-06 Java开源项目日报Top10

根据Github Trendings的统计,今日(2025-06-06统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10TypeScript项目1Java实现的算法集合:使用Gitpod.io进行编辑和贡献 创建周期:2883 天开发语言:Java协议类型:MIT LicenseStar数量…...

使用 Ansible 在 Windows 服务器上安装 SSL 证书

在本教程中,我将向您展示如何使用 Ansible 在 Windows 服务器上安装 SSL 证书。使用 Ansible 自动化 SSL 证书安装过程可以提高 IT 运营的效率、一致性和协作性。我将介绍以下步骤: 将 SSL 证书文件复制到服务器将 PFX 证书导入指定的存储区获取导入的证…...

厂区能源监控系统:网关赋能下的高效能源管理与环保监测

在现代工业生产领域,能源的有效利用与环境保护是企业实现可持续发展的两大关键要素。厂区能源监控系统借助先进的信息技术与自动化控制手段,对厂区内能源消耗及污水处理等核心环节展开实时监控与精细化管理。其中,御控网关作为系统关键枢纽&a…...

CentOS 7 如何安装llvm-project-10.0.0?

CentOS 7 如何安装llvm-project-10.0.0? 需要先升级gcc至7.5版本,详见CentOS 7如何编译安装升级gcc版本?一文 # 备份之前的yum .repo文件至 /tmp/repo_bak 目录 mkdir -p /tmp/repo_bak && cd /etc/yum.repo.d && /bin/mv ./*.repo …...

Cursor 1.0 的核心功能亮点及技术价值分析

Cursor 1.0 的核心功能亮点及技术价值分析 结合官方更新和开发者实测整理: 🛠️ 一、BugBot:智能自动化代码审查 功能亮点:深度集成 GitHub,自动扫描 Pull Request(PR)中的潜在 Bug(…...

软考 系统架构设计师系列知识点之杂项集萃(83)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(82) 第150题 体系结构权衡分析方法(Architecture Tradeoff Analysis Method,ATAM)是一种常见的系统架构评估框架,该框架主要关注系统的…...

NLP学习路线图(二十六):自注意力机制

一、为何需要你?序列建模的困境 在你出现之前,循环神经网络(RNN)及其变种LSTM、GRU是处理序列数据(如文本、语音、时间序列)的主流工具。它们按顺序逐个处理输入元素,将历史信息压缩在一个隐藏…...

Unity3D仿星露谷物语开发60之定制角色其他部位

1、目标 上一篇中定制了角色的衬衫、手臂。 本篇中将定制角色其他部位的图形,包括:裤子、发型、皮肤、帽子等。 2、定制裤子 (1)修改ApplyCharacterCustomisation.cs脚本 我们需要设置一个输入框选择裤子的颜色。 // Select …...

C++动态链接库封装,供C#/C++ 等编程语言使用——C++动态链接库概述(总)

目录: 一、前言及背景1.1需求描述1.2常见编程语言对比1.3应用背景 二、C对外接口2.1C对外封装2.2基于目标平台封装接口形式 三、系列文章汇总 一、前言及背景 1.1需求描述 不同的编程语言,具有不同的编程生态环境,对于项目应用来说&#xff…...

Google机器学习实践指南(机器学习模型泛化能力)

🔥 Google机器学习(14)-机器学习模型泛化能力解析 Google机器学习(14)-机器学习模型泛化原理与优化(约10分钟) 一、泛化问题引入 ▲ 模型表现对比: 假设森林中树木健康状况预测模型: 图1:初始模型表现 …...