数据分析-python学习 (1)numpy相关

news2024/11/24 19:40:38

内容为:https://juejin.cn/book/7240731597035864121的学习笔记

导包
import numpy as np  

numpy数组创建

  • 创建全0数组,正态分布、随机数组等就不说了,提供了相应的方法
  • 通过已有数据创建有两种 arr1=np.array([1,2,3,4,5]) 或者data=np.loadtxt(‘C:/Users/000001_all.csv’,dtype=‘float’,delimiter=‘,’,skiprows=1) (data=np.genfromtxt(‘C:/Users/000001_all.csv’,dtype=‘float32’,delimiter=‘,’,skip_header=1) )
  • 注意浅拷贝与深拷贝 array copy是深,asarray是浅
import numpy as np  
arr1=np.array([1,2,3,4,5])  
arr2=np.array(arr1)  
arr3=np.asarray(arr1)  
arr4=np.copy(arr1)  
arr1[0]=100  
print('更改后arr2为:',arr2)  
print('更改后arr3为:',arr3)  
print('更改后arr4为:',arr4)

更改后arr2为: [1 2 3 4 5]
更改后arr3为: [100   2   3   4   5]
更改后arr4为: [1 2 3 4 5]
  • 数组的切片也是浅拷贝
Score=np.array([69,80,90,40,60,20,90,94,90,99])#学生的成绩
 Score[:3]=0
 print('修改切片对象成绩后的Score为',Score)
 Score1=[69,80,90,40,60,20,90,94,90,99]
 Score1_list=Score1[:3]
 Score1_list=0
 print('修改Score1_list后的Score1为',Score1)

修改切片对象成绩后的Score为 [ 0  0  0 40 60 20 90 94 90 99]
修改Score1_list后的Score1为 [69, 80, 90, 40, 60, 20, 90, 94, 90, 99]

索引的访问

访问某个下标(一个元素)得到的也是一个数值;如果访问的是多个下标,得到的是一个数组

一维

在这里插入图片描述

二维

Score2=np.array([[69,40,30],[80,90,40],[90,100,50],[40,20,99],[60,60,66],
                 [20,66,44],[90,88,56],[94,99,67],[90,20,70],[99,50,86]])
 print('学号为1的同学的语文和英语成绩为',Score2[[0,0],[0,2]])
学号为 1 的同学的语文和英语成绩为 [69 30]

在这里插入图片描述

三维

Space=np.array([
    [[5,4,8],[5,9,2],[4,5,3]],
    [[4,9,6],[2,2,5],[4,3,4]],
    [[4,2,1],[7,6,3],[4,6,5]]
                ])
 print(Space[[0,0,1],[0,1,2],[0,0,2]])

[5 5 4]

在这里插入图片描述

数组的运算

广播

3种

广播机制的原则是如果两个数组的从后数第一个维度轴长度相符或其中一个数组的轴长为 1,则认为它们能够广播

Arr1=np.array([1,2,3])
print(Arr1)  
print(Arr1*3)

[1 2 3]
[3 6 9]
Arr2=np.array([[1,2,3],[4,5,6]])  
Arr1=np.array([1,2,3])  
print(Arr1)  
print(Arr2)  
print(Arr1+Arr2)

[1 2 3]
**********
[[1 2 3]
 [4 5 6]]
**********
[[2 4 6]
 [5 7 9]]

Arr2=np.array([[1,2,3],[4,5,6]])  
Arr=np.array([[1],[2]])  
print(Arr2)  
print(Arr)  
print(Arr2+Arr)

[[1 2 3]
 [4 5 6]]
**********
[[1]
 [2]]
**********
[[2 3 4]
 [6 7 8]]

数值与数组的标量运算,就用到了广播机制,会把数据扩充到跟待运算一样的大小,按位相加/减/乘/除

计算函数

除了可以arr1与arr2直接相运算,如arr1*arr2,也有相应的方法
方法:add() 加法函数,subtract() 减法函数,multiply() 乘法函数,divide() 除法函数,mod() 取余函数。

Score_F=np.array([69,80,90,40,60,20,90,94,90,99])#第一次成绩  
Score_S=np.array([70,92,63,20,50,96,33,44,55,30])#第二次成绩  
Score_chaju=np.subtract(Score_F,Score_S)  
print('求两次成绩的和',np.add(Score_F,Score_S))
print('第一次成绩的0.6加第二次成绩的0.4',np.add(np.multiply(Score_F,0.6),np.multiply(Score_S,0.4)))
print('查看两次成绩的差距,差距以正数显示',np.abs(Score_chaju))

统计函数

axis有两个值,为0求的是纵向的聚合值,为1求的是横向的聚合值,
常用的聚合函数如下:mean,sum,max,min,std,var

标准差是方差的算数平方根(标准差和原数据单位相同,方差多个平方),所以方差>标准差,说明偏差大;方差<标准差,说明偏差小

在这里插入图片描述

在这里插入图片描述

逻辑运算

提供了all、any 和 where 这三个方法
在这里插入图片描述

# 得到两门成绩都及格的同学的成绩
import numpy as np  
Score=np.array([[98,89],[64,90],[60,56],[92,78],[32,45],[48,30]])  
Score60=Score>60  
Score_bool=np.all(Score60,axis=1)  
print(Score_bool)  
print(Score[Score_bool])

[ True  True False  True False False]
[[98 89]
 [64 90]
 [92 78]]

#查看数学或者语文超过 90 分同学的成绩
Score90=Score>90  
Score_bool=np.any(Score90,axis=1)  
print(Score_bool)  
print(Score[Score_bool])

[ True False False  True False False]
[[98 89]
 [92 78]]

# 成绩大于60的分数有哪些
import numpy as np
Score_math=np.array([98,64,60,92,32,48])
score60_index = np.where(Score_math>60)
score60 = Score_math[score60_index]
print(score60_index)
print(score60)

(array([0, 1, 3]),)
[98 64 92]

矩阵运算

可以用@或dot来实现,它俩是等价的

注意是(3, 2)*(2, 4)=(3, 4) 只有

fruit_price=np.array([[5,4,3]])  # 1*3
jinshu=np.array([[2],[3],[1]])  # 3*1
print('水果的总价格为:\n',fruit_price@jinshu)   #得到的是1*1的矩阵
print('水果的总价格为:\n',np.dot(fruit_price,jinshu))

水果的总价格为:
 [[25]]
水果的总价格为:
 [[25]]

数组的拆分与合并

合并

水平可以用concatenate 方法、hstack 方法和 column_stack 方法
垂直可以用concatenate 方法、vstack 方法和 row_stack 方法

  • 水平
import numpy as np  
Stock1=np.array([[14.322,14.552],[14.472,14.532],[14.592,15.022],[14.852,14.802]])  
Stock2=np.array([[14.652,14.192],[14.832,14.422],[15.022,14.592],[15.152,14.722]])  
# 方式1
Stock=np.concatenate((Stock1,Stock2),axis=1)  
# 方式2
Stock=np.hstack((Stock1,Stock2)) 
# 方式3
Stock=np.column_stack((Stock1,Stock2)) 

print(Stock)#上面3种得到的结果一样,写一块了

[[14.322 14.552 14.652 14.192]
 [14.472 14.532 14.832 14.422]
 [14.592 15.022 15.022 14.592]
 [14.852 14.802 15.152 14.722]]

在这里插入图片描述

  • 垂直
import numpy as np
Stock1=np.array([[14.322,14.552],[14.472,14.532],[14.592,15.022],[14.852,14.802]])
Stock2=np.array([[14.912,14.932],[14.772,14.602]])
Stock=np.concatenate((Stock1,Stock2),axis=0)
Stock=np.vstack((Stock1,Stock2))
Stock=np.row_stack((Stock1,Stock2))
print(Stock)


[[14.322 14.552]
 [14.472 14.532]
 [14.592 15.022]
 [14.852 14.802]
 [14.912 14.932]
 [14.772 14.602]]

在这里插入图片描述

分割

# 水平
import numpy as np
Stock=np.array([[14.322,14.552],[14.472,14.532],[14.592,15.022],[14.852,14.802],[14.912,14.932],[14.772,14.602]])
open,close=np.split(Stock,2,axis=1)
print('open为{},close为{}'.format(open,close))

open[[14.322]
 [14.472]
 [14.592]
 [14.852]
 [14.912]
 [14.772]],close为[[14.552]
 [14.532]
 [15.022]
 [14.802]
 [14.932]
 [14.602]]

# 垂直
# 这里面对行下标做切分,包含头不包含尾如按[1,3,4]: 0,   1,2,   3,   4,5
import numpy as np
Stock=np.array([[14.322,14.552],[14.472,14.532],[14.592,15.022],[14.852,14.802],[14.912,14.932],[14.772,14.602]])
arr1,arr2,arr3,arr4=np.split(Stock,[1,3,4],axis=0)
print('arr1为{},arr2为{},arr3为{},arr4为{}'.format(arr1,arr2,arr3,arr4))

arr1为[[14.322 14.552]],arr2为[[14.472 14.532]
 [14.592 15.022]],arr3为[[14.852 14.802]],arr4为[[14.912 14.932]
 [14.772 14.602]]

综合案例:
https://juejin.cn/book/7240731597035864121/section/7255506664244117559

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

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

相关文章

vxe-grid\table 自定义动态列排序设置

实现动态加载的表格数据&#xff0c;根据设置动态控制指定的某些字段排序功能&#xff1b;如下图所示&#xff1b; 代码实现&#xff1a;标签内添加属性&#xff1b; :sort-config"{trigger:cell, defaultSort: {field: , order: desc}, orders:[desc, asc]}" sort-…

LinuxC编程——线程

目录 一、概念二、进程与线程的区别⭐⭐⭐三、线程资源四、函数接口4.1 线程创建4.2 线程退出4.3 线程回收4.3.1 阻塞回收4.3.2 非阻塞回收 4.4 pthread_create之传参4.5 练习 一、概念 是一个轻量级的进程&#xff0c;为了提高系统的性能引入线程。 进程与线程都参与cpu的统一…

这些可以将音频翻译成文字的工具你值得拥有

你是否曾经遇到过这样的情景&#xff1a;你收到了一段包含外国人发言内容的会议音频&#xff0c;但是由于自己的外语水平一般而却无法理解其中的外语内容&#xff1f;别担心&#xff0c;现在有一些神奇的翻译音频文件的软件可以帮助你解决这个问题&#xff01;如果你还不知道翻…

电脑必备的3款简单好用小工具,建议收藏使用!

​在当今社会&#xff0c;电脑已成为我们工作、学习和娱乐的重要工具。除了拥有一台电脑&#xff0c;一些小工具的加入可以大大提升我们的效率和使用体验。 整理了 3 款比较实用的软件&#xff0c;个人觉得非常实用。&#xff0c;它们将让你的电脑使用更加便捷、高效。不管你是…

使用Prisma访问数据库

首先&#xff0c;确保你已经安装了 Prisma CLI。你可以使用以下命令进行安装&#xff1a; npm install prisma --save-dev接下来&#xff0c;你需要初始化 Prisma 项目&#xff0c;最后一个参数需要指定数据库类型&#xff0c;如postgresql&#xff0c;sqlist&#xff0c;mysql…

深入浅出对话系统——检索式对话系统进阶方法

引言 本文介绍检索式对话系统进阶方法&#xff0c;主要介绍两篇论文工作。 Fine-grained Post-training for Improving Retrieval-based Dialogue Systems 这里的post-training是定义在pre-training和fine-turning中间的阶段&#xff0c;具体的思想是用一些特定领域的数据去…

ControlNet

2023.8.10 Adding Conditional Control to Text-to-Image Diffusion Models 对于 T2I 扩散模型添加 条件控制 相关联比较大的几篇论文&#xff1a; 0.Abstract 可以为预训练的扩散模型提供额外的输入条件控制。不需要很多计算资源。 即使在小数据集上&#xff0c;也具有鲁棒…

中间人攻击与 RADIUS 身份验证

在数字时代&#xff0c;中间人&#xff08;MitM&#xff09;攻击已成为一种日益严重的威胁。根据网络安全风险投资公司的网络安全统计数据&#xff0c;预计到2025年&#xff0c;网络犯罪每年将给世界造成10.5万亿美元的损失&#xff0c;比2015年的3万亿美元大幅增加。这种令人震…

企业微信消息模板通过中转页面(h5)判断跳转pc还是跳小程序

需求&#xff1a;甲方要根据不同的端跳转不同端的详情页面&#xff0c;为什么要这样&#xff0c;是应为每次在PC端点击消息&#xff0c;都要扫码登录进入小程序&#xff0c;不想进入小程序&#xff0c;要打开PC端 1、在pc端的微信中点击消息&#xff0c;则打开PC后台管理系统 …

Telegram营销,全球跨境电商都在研究的营销策略

Telegram 目前有7 亿月活跃用户。作为一个如此流行和广泛的即时通讯平台&#xff0c; Telegram 已成为企业和客户沟通的重要即时通讯工具。 为了使企业能够快速有效地覆盖目标受众&#xff0c;Telegram 不断改进平台&#xff0c;提供一系列功能&#xff0c;例如可定制的自动化…

内网穿透实战应用-——【如何在树莓派上安装cpolar内网穿透】

如何在树莓派上安装cpolar内网穿透 文章目录 如何在树莓派上安装cpolar内网穿透前言1.在树莓派上安装cpolar2.查询cpolar版本号3.激活本地cpolar客户端4.cpolar记入配置文件 前言 树莓派作为一个超小型的电脑系统&#xff0c;虽然因其自身性能所限&#xff0c;无法如台式机或笔…

Vue Baidu Map--自定义点图标bm-marker

自定义点图标 将准备好的图标放到项目中 使用import引入&#xff0c; 并在data中进行声明 <script> import mapIconRed from ./vue-baidu-map/img/marker_red_sprite.png export default {data() {return {mapIconRed,}}, } </script>在<bm-marker>中加入参…

【C++】map和set

目录 一、容器补充1.序列式容器与关联式容器2.键值对3.树形结构的关联式容器 二、set1.set的介绍2.set的使用3.multset的介绍4.multset的使用 三、map1.map的介绍2.map的使用3.multimap的介绍4.multimap的使用 一、容器补充 1.序列式容器与关联式容器 我们已经接触过STL中的部…

FISCO BCOS V3.0 Air建链体验——对比V2.9建链差别

前提 好久不见&#xff0c;最近因为毕业的手续等问题&#xff0c;一直都没有更新&#xff0c;FISCO BCOS第二季task挑战赛如期展开啦&#xff0c;因为毕业的问题&#xff0c;也是非常遗憾的错过了上一期的task挑战赛&#xff0c;这一期一定双倍挑战&#xff0c;hhhhhh Air版本…

spring源码之--启动入口

前面的文章搭建过spring源码&#xff0c;这里暂时不做展开讲解 spring源码搭建-略 1、那么spring的源码入口从哪查看呢&#xff1f;springboot的源码是如何启动spring的源码呢&#xff1f;追着这个疑问总结了一下如下&#xff1a; 在spring源码中直接添加一个模块&#xff0c…

Jay17 2023.8.10日报

笔记 【python反序列化】 序列化 类对象->字节流&#xff08;字符串&#xff09; 反序列化 字节流->对象 python反序列化没PHP这么灵活&#xff0c;没这么多魔术方法。 import pickle import os class ctfshow(): def init(self): self.username0 self.password0 d…

uniapp-----封装接口

系列文章目录 uniapp-----封装接口 uniapp-----分包 文章目录 系列文章目录 uniapp-----封装接口 uniapp-----分包 文章目录 前言 一、技术 二、封装步骤 1.准备 ​编辑 2.代码填充 request.js&#xff1a; api.js&#xff1a; min.js 页面使用 总结 前言 uni…

数据库优化脚本执行报错

目录 一、执行数据库优化脚本 报错... 3 解决方法&#xff1a;... 4 1、直接注释掉RECYCLE_POOLS 赋值sql语句块... 4 2、手动修改脚本... 5 附录... 6 一、执行数据库优化脚本 报错 AutoParaAdj3.5_dm8.sql 1&#xff09;manager中报错 -20001: 执行失败, -7065 数据未…

38、IPv6过渡技术

本节内容作为IPv6相关知识的最后一节内容&#xff0c;同时也作为我们本专栏网络层知识的最后一节内容&#xff0c;主要介绍从IPv4地址到IPv6地址过渡的相关技术。在这里我们只学习各类考试中常考的三种技术。 IPv4向IPv6的过渡 在前面的知识中&#xff0c;我们学习到了两种IP地…