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

内容为: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]=0print('修改切片对象成绩后的Score为',Score)Score1=[69,80,90,40,60,20,90,94,90,99]Score1_list=Score1[:3]Score1_list=0print('修改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.hqwc.cn/news/60539.html

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

相关文章

一个php文件搞定微信小程序订阅消息推送(含access_token的获取、缓存、刷新)

摘要 微信小程序的订阅消息功能具有多个优点&#xff0c;可以为开发者和用户带来便利和更好的体验。以下是一些主要的优点&#xff1a; **个性化消息推送&#xff1a; **订阅消息允许开发者向用户发送个性化的消息内容&#xff0c;根据用户的偏好和行为进行定制化推送&#x…

干货 | 详述 Elasticsearch 向量检索发展史

1. 引言 向量检索已经成为现代搜索和推荐系统的核心组件。 通过将复杂的对象&#xff08;例如文本、图像或声音&#xff09;转换为数值向量&#xff0c;并在多维空间中进行相似性搜索&#xff0c;它能够实现高效的查询匹配和推荐。 图片来自&#xff1a;向量数据库技术鉴赏【上…

HTTP——十一、Web的攻击技术

HTTP 一、针对Web的攻击技术1、HTTP 不具备必要的安全功能2、在客户端即可篡改请求3、针对Web应用的攻击模式 二、因输出值转义不完全引发的安全漏洞1、跨站脚本攻击2、SQL 注入攻击3、OS命令注入攻击4、HTTP首部注入攻击5、邮件首部注入攻击6、目录遍历攻击7、远程文件包含漏洞…

力扣 -- 139. 单词拆分

一、题目 题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; 二、解题步骤 下面是用动态规划的思想解决这道题的过程&#xff0c;相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码 class Solution { public:bool wordBreak(str…

电脑开机出现Boot Device怎么办?

开机出现Boot Device这个问题很常见&#xff0c;有时还会出现No Boot Device的问题&#xff0c;虽然多了一个单词&#xff0c;但意思是相同的&#xff0c;这些问题说明你的系统盘出现了问题&#xff0c;或者是引导出现了问题。这该如何解决呢&#xff1f; 方法1. 检查主板或硬盘…

需要数电发票接口的,先熟悉下数电发票基本常识

最近有一些技术小伙伴来咨询数电发票接口的时候&#xff0c;对数电发票的一些常识不太了解&#xff0c; 导致沟通起来比较困难。比较典型的这三个问题&#xff1a; 一、开具数电票时&#xff0c;如何设置身份认证频次&#xff1f; 请公司的法定代表人或财务负责人登录江苏省电…

面试热题(最长上升子序列)

给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 输入&#xff1…

智慧工地源码,Spring Cloud+ Vue+UniApp开发,微服务架构

智慧工地源码&#xff0c;智慧工地云平台源码 智慧工地APP源码 智慧工地的核心是数字化&#xff0c;它通过传感器、监控设备、智能终端等技术手段&#xff0c;实现对工地各个环节的实时数据采集和传输&#xff0c;如环境温度、湿度、噪音等数据信息&#xff0c;将数据汇集到云…

信号平滑或移动平均滤波研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

集合工具类 Collections:提升集合操作效率

文章目录 多元素添加&#xff1a;addAll 方法随机置换&#xff1a;shuffle 方法自定义对象排序&#xff1a;sort 方法总结 在Java的集合框架中&#xff0c;Collections 是一个包含了许多操作集合的静态方法的工具类。通过使用 Collections 类提供的方法&#xff0c;我们能够更加…

最好的和解,是陪“内在小孩”一起长大

“为什么我总是很心累&#xff1f;” 经常莫名感到心累、有深深的无力感&#xff0c;是现代成年人的通病。 生活压力大&#xff0c;忙忙碌碌却觉得迷茫、空虚、压抑&#xff1b; 不管怎么努力&#xff0c;好像总是卡在某个地方&#xff0c;得不到升职加薪&#xff1b; 每段感情…

【D3S】集成smart-doc并同步配置到Torna

目录 一、引言二、maven插件三、smart-doc.json配置四、smart-doc-maven-plugin相关命令五、推送文档到Torna六、通过Maven Profile简化构建 一、引言 D3S&#xff08;DDD with SpringBoot&#xff09;为本作者使用DDD过程中开发的框架&#xff0c;目前已可公开查看源码&#…