大二下期末

一.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表示按列拼接,就是把数据一列一列接上去,即水平连接

三.Matplotlib.pyplot

1.plt.pie()

import matplotlib.pyplot as plt
import numpy as npplt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,10))sales_data = [100,102,140,149,120]
fruit_labels = ['西瓜','苹果','香蕉','菠萝','橘子']plt.subplot(2,3,1)
plt.pie(sales_data,labels=fruit_labels,autopct='%1.2f%%')
plt.title("水果销售占比分析图")plt.subplot(2,3,2)
plt.bar(fruit_labels,np.array(sales_data))
for x,y in enumerate(sales_data):plt.text(x-0.3,y+1,str(y),color='r')
plt.grid(alpha=0.5)
plt.title("水果销售数量柱状图")
plt.xlabel('水果种类')
plt.ylabel('销售数量')plt.subplot(2,3,3)
def my_autopct_func(percentage,all_values):absolute = round(percentage / 100 * sum(all_values))return f"{percentage:.1f}%\n({absolute}份)"
plt.pie(sales_data,autopct=lambda pct:my_autopct_func(pct,sales_data),labels=fruit_labels)
plt.title("水果销售占比分析")plt.subplot(2,3,4)
plt.pie(sales_data,labels=fruit_labels,autopct='%1.2f%%',startangle=90,explode=(0,0.1,0.2,0.3,0.4))
plt.title("水果销售占比分析")plt.subplot(2,3,5)
plt.pie(sales_data,labels=fruit_labels,autopct='%1.2f%%',startangle=180,explode=(0,0.01,0.05,0.1,0.15),shadow={'ox':-0.04,'oy':0.04,'edgecolor':'none','shade':0.5,'alpha':0.7})plt.tight_layout()
plt.show()

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

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

相关文章

D3ctf-web-d3invitation单题wp

#注入 #用kali构造凭证访问MinIO服务器 #用mc带临时凭证访问远程Minion的储存桶 还有一个 minio 服务的api,我们后面要用 /static/js/tools.js function generateInvitation(user_id, avatarFile) {if (avatarFile) {object_name avatarFile.name;genSTSCreds(ob…

基于 Vue 和 Spring Boot 实现滑块验证码的机器验证

基于 Vue 和 Spring Boot 实现滑块验证码的机器验证 需求概述技术选型前端实现1. 引入组件2. 修改后端请求URL3. 新增机器验证页面4.首页调用验证组件 后端实现流程梳理具体实现1. 引入依赖2. 增加yml配置3. 代码实现4.跨域配置(可选) 实现效果二次验证的…

[Java恶补day13] 53. 最大子数组和

休息了一天,开始补上! 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 示例 1: 输入:nums …

sql server如何创建表导入excel的数据

在 SQL Server 中,可以通过几种方式将 Excel 数据导入到数据库表中。下面是一个完整的流程,包括如何创建表,以及将 Excel 数据导入该表的方法: ✅ 方法一:使用 SQL Server Management Studio (SSMS) 的导入向导&#x…

C++单例模式教学指南

C单例模式完整教学指南 📚 目录 [单例模式基础概念][经典单例实现及问题][现代C推荐实现][高级话题:双重检查锁][实战应用与最佳实践][总结与选择指南] 1. 单例模式基础概念 1.1 什么是单例模式? 单例模式(Singleton Pattern&…

使用xdocreport导出word

之前java总用freemaker进行导出&#xff0c;但是改xml实在是太繁琐了&#xff0c;这次找了另一个工具进行体验. 一、简单导出 pom引入 <dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.core</arti…

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …

C++.OpenGL (2/64)你好,三角形(Hello Triangle)

你好,三角形(Hello Triangle) 绘制流程概览 #mermaid-svg-MvIGIovxiuKVfzy8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MvIGIovxiuKVfzy8 .error-icon{fill:#552222;}#mermaid-svg-MvIGIovxiuKVfzy8 .error…

汽车安全体系:FuSa、SOTIF、Cybersecurity 从理论到实战

汽车安全&#xff1a;功能安全&#xff08;FuSa&#xff09;、预期功能安全&#xff08;SOTIF&#xff09;与网络安全(Cybersecurity) 从理论到实战的安全体系 引言&#xff1a;自动驾驶浪潮下的安全挑战 随着自动驾驶技术从L2向L4快速演进&#xff0c;汽车安全正从“机械可靠…

N2语法 列挙、話題提出

1&#xff0c;&#xff5e;やら&#xff5e;やら  接続&#xff1a;名詞、辞書形  意味&#xff1a;…啦…啦&#xff08;列举代表性的事物&#xff09;  例文&#xff1a;     家に帰って料理やら洗濯やら何もしなければならない。     帰国前、買い物やら荷造りや…

深入理解React Hooks的原理与实践

深入理解React Hooks的原理与实践 引言 React Hooks 自 2018 年 React 16.8 发布以来&#xff0c;彻底改变了前端开发者的编码方式。它通过函数式组件提供了状态管理和生命周期等功能&#xff0c;取代了传统的类组件&#xff0c;使得代码更加简洁、复用性更强。然而&#xff…

RockyLinux9.6搭建k8s集群

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

链游技术破壁:NFT资产确权与Play-to-Earn经济模型实战

链游技术破壁&#xff1a;NFT资产确权与Play-to-Earn经济模型实战 ——从「投机泡沫」到「可持续生态」的技术重构 一、NFT确权技术革新&#xff1a;从链上存证到动态赋权 跨链确权架构 全链互操作协议&#xff1a;采用LayerZero协议实现以太坊装备与Solana土地的跨链组合&…

Java下载文件(特殊字符编码处理)

当你在这个问题上花费了数小时而解决不了&#xff0c;你才会知道这篇文章对你的帮助 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import org.springframework.http.HttpEntity; import org.springframewo…

TDengine 高级功能——读缓存

简介 在物联网&#xff08;IoT&#xff09;和工业互联网&#xff08;IIoT&#xff09;大数据应用场景中&#xff0c;实时数据的价值往往远超历史数据。企业不仅需要数据处理系统具备高效的实时写入能力&#xff0c;更需要能快速获取设备的最新状态&#xff0c;或者对最新数据进…

YOLO在C#中的完整训练、验证与部署方案

YOLO在C#中的完整训练、验证与部署方案 C# 在 YOLO 部署上优势明显&#xff08;高性能、易集成&#xff09;&#xff0c;但训练能力较弱&#xff0c;通常需结合 Python 实现。若项目对开发效率要求高且不依赖 C# 生态&#xff0c;建议全程使用 Python&#xff1b;若需深度集成…

pikachu靶场通关笔记17 CSRF关卡03-CSRF(Token)

目录 一、CSRF原理 二、CSRF Token 三、源码分析 四、CSRF Token tracker插件 1、插件简介 2、插件安装 五、渗透实战 1、用户登录 2、修改个人信息 3、bp拦截报文 4、bp改报文探测 5、配置CSRF-Token-Tracer 6、bp改包成功 7、查看CSRF Token Tracker配置 本系…

C#面试问题81-100

85. What are anonymous types? 匿名类型是在需要的地方直接定义的类型&#xff0c;甚至都 不给它命名。它非常适合我们这种用例——类型小且临时&#xff0c;而且我们无意在其 他地方使用它 匿名类型是直接从 System.Object 派生的类对象。它们不能转换为任何 其他类型。●…

【Ragflow】25.Ragflow-plus开发日志:excel文件解析新思路/公式解析适配

引言 RagflowPlus v0.3.0 版本中&#xff0c;增加了对excel文件的解析支持&#xff0c;但收到反馈&#xff0c;说效果并不佳。 以下测试文件内容来自群友反馈提供&#xff0c;数据已脱敏处理。 经系统解析后&#xff0c;分块效果如下&#xff1a; 可以看到&#xff0c;由于该…

VS2022下C++ Boost库安装与使用使用

一.Boost概述 1.简介 Boost 是一个广泛使用的 C 库集合&#xff0c;提供了许多高质量、可移植、高效的工具和组件&#xff0c;被视为 C 标准库的延伸。自 1998 年成立以来&#xff0c;Boost 已成为 C 社区的核心资源&#xff0c;许多 Boost 库通过实践验证后被纳入 C 标准&am…