数据分析 -- numpy

文章目录

  • numpy库简介
    • 简介
    • 特点
  • numpy操作
    • 数组创建
    • 数组属性
    • 数组变更
    • 数据计算

numpy库简介

简介

  1. 开源的Python库,它提供了高性能的多维数值(numpy.ndarray)计算能力;
  2. 由“Numerical Python”缩写而来,并且它是Pandas库的基础;
  3. NumPy提供了许多有用的功能,例如数组操作、矩阵运算、傅里叶变换等;
  4. 支持向量化编程,这使得它比传统的循环和条件语句更加高效;
  5. NumPy完全基于C语言实现,并且已经经过了充分的优化,因此它的运行速度非常快。

特点

  1. numpy中,用轴(axis)来描述数组的维度。
  2. axis=0表列,意味着你将沿着列方向(跨行)对数据进行操作,即进行列数据操作;
  3. 同理,axis=1表行,即进行行数据操作。

numpy操作

import numpy as np

数组创建

  • 创建一维数组
list = [1,2,3,4,5]
array = np.array(list)
print(array)
print(type(array))>[1 2 3 4 5]
><class 'numpy.ndarray'>
  • 创建二维数组
list = [[1,2],[3,4],[5,6]]
array = np.array(list)
print(array)>[[1 2][3 4][5 6]]
  • 创建等差一维数组
- np.arange(开始值,结束值,步长)array = np.arange(1,10,2)
print(array)
>[1 3 5 7 9]
  • 创建一/多维数组
- np.zeros(shape, dtype=float, order='C'):创建一个元素全为0的数组
- np.ones(shape, dtype=None, order='C'):创建一个元素全为1的数组
- np.empty(shape, dtype=float, order='C'):创建一个未初始化的数组,元素随机
- np.full(shape, fill_value, dtype=None, order='C'):创建一个具有给定形状和填充值的数组- shape: 数组的性转- dtype: 数组元素数据类型- order:内存布局顺序,C-按行,F-按列array = np.empty((2,4), dtype=np.int8)
print(array)
>[[ 96 -39 -22  70][ 24  86   0   0]]
  • 创建随机数组
import numpy as np# 创建服从均匀分布的随机数组
rand_array = np.random.rand(2, 3)
print("均匀分布的随机数组:\n", rand_array)# 创建服从标准正态分布的随机数组
randn_array = np.random.randn(2, 3)
print("标准正态分布的随机数组:\n", randn_array)# 创建指定范围的随机整数数组
randint_array = np.random.randint(1, 10, size=(2, 3))
print("指定范围的随机整数数组:\n", randint_array)# 创建服从均匀分布的随机数组
random_array = np.random.random((2, 3))
print("均匀分布的随机数组:\n", random_array)>均匀分布的随机数组:[[0.49018606 0.05014734 0.38739906][0.09357898 0.98583039 0.6992634 ]]
>标准正态分布的随机数组:[[ 1.44017508  0.55562128 -0.11157242][ 0.80112095  1.58158805  0.81131876]]
>指定范围的随机整数数组:[[7 6 9][5 2 6]]
>均匀分布的随机数组:[[0.35562269 0.29418661 0.49925419][0.76548519 0.70753405 0.02305559]]

数组属性

  • 数组索引
array = np.array([[1, 2, 3], [4, 5, 6]])
# 获取特定元素
print("第一个元素:", array[0, 0])
print("最后一个元素:", array[-1, -1])
# 获取特定行
print("第一行:", array[0, :])
print("第二列:",array[:, 1])>第一个元素: 1
>最后一个元素: 6
>第一行: [1 2 3]
>第二列: [2 5]
  • 数组形状
# 创建数组
array = np.array([[1, 2, 3], [4, 5, 6]])
print(array.shape)>(2, 3)
  • 数组维度/大小
array = np.array([[1, 2, 3], [4, 5, 6]])
print(array.ndim)
print(array.size)> 2
> 6
  • 数组数据类型
array = np.array([[1, 2, 3], [4, 5, 6]])
print(array.dtype)> int64

数组变更

  • 填充
array = np.empty((2, 3), dtype=np.int8)# 使用np.fill()方法填充数组
array.fill(8)
print("使用np.full()方法填充的数组:", array)
>使用np.full()方法填充的数组: [[8 8 8][8 8 8]]
  • 插入删除
array = np.array([1, 2, 3, 4, 5])# 在指定位置插入元素
inserted_array = np.insert(array, 2, [6, 7])
print("插入元素后的数组:", inserted_array)
>插入元素后的数组: [1 2 6 7 3 4 5]# 在末尾追加元素
appended_array = np.append(array, [6, 7])
print("追加元素后的数组:", appended_array)
>追加元素后的数组: [1 2 3 4 5 6 7]# 删除指定位置的元素
deleted_array = np.delete(array, 2)
print("删除元素后的数组:", deleted_array)
>删除元素后的数组: [1 2 4 5]
  • 数组切片
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
sub_array = array[0:2, 1:3]
print(sub_array)>[[2 3][5 6]]
  • 数组转置
my_array = np.array([[1, 2, 3], [4, 5, 6]])
transposed_array = np.transpose(my_array)
print(transposed_array)>[[1 4][2 5][3 6]]
  • 改变形状
# 创建数组
array = np.array([[1, 2, 3], [4, 5, 6]])
array = np.reshape(array, (3, 2))
print(array)>[[1 2][3 4][5 6]]
  • 改变数据类型
array = np.array([[1, 2, 3], [4, 5, 6]])
array = array.astype(float)
print(array.dtype)>float64
  • 数组连接
# 创建数组
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])# 沿水平方向连接数组
hstacked_array = np.hstack((array1, array2))
print("水平连接的数组:\n", hstacked_array)# 沿垂直方向连接数组
vstacked_array = np.vstack((array1, array2))
print("垂直连接的数组:\n", vstacked_array)>水平连接的数组:[[1 2 5 6][3 4 7 8]]
>垂直连接的数组:[[1 2][3 4][5 6][7 8]]
  • 数组拆分
- numpy.split(array, indices_or_sections, axis=0): 沿指定轴拆分数组
- numpy.hsplit(array, indices_or_sections): 水平拆分数组(列)
- numpy.vsplit(array, indices_or_sections): 垂直拆分数组(行)array = np.array([[1, 2, 3, 11, 12, 13], [4, 5, 6, 14,15,16], [7, 8, 9, 17,18,19]])# 使用numpy.split()沿第1轴(行)拆分数组
split_array1 = np.split(array, 3, axis=0)
for arr in split_array1:print(arr)>[[ 1  2  3 11 12 13]][[ 4  5  6 14 15 16]][[ 7  8  9 17 18 19]]# 使用numpy.hsplit()水平拆分数组
split_array2 = np.hsplit(array, 3)
for arr in split_array2:print(arr)>[[1 2][4 5][7 8]][[ 3 11][ 6 14][ 9 17]][[12 13][15 16][18 19]]# 使用numpy.vsplit()垂直拆分数组
split_array3 = np.vsplit(array, 3)
for arr in split_array3:print(arr)>[[ 1  2  3 11 12 13]][[ 4  5  6 14 15 16]][[ 7  8  9 17 18 19]]
  • 数组排序
array = np.array([3, 1, 2, 5, 4])# 对数组进行排序
sorted_array = np.sort(array)
print("排序后的数组:", sorted_array)sorted_indices = np.argsort(array)
print("排序后的原索引:", sorted_indices)>排序后的数组: [1 2 3 4 5]
>排序后的索引: [1 2 0 4 3]
  • 复制
array = np.array([1, 2, 3])# 使用np.copy()函数复制数组
copied_array = array.copy()
print("复制的数组:", copied_array)
>复制的数组: [1 2 3]
  • 重复
array = np.array([1, 2, 3])# 数组元素重复
repeated_array = np.repeat(array, 2)
print("重复后的数组:", repeated_array)# 数组重复
tiled_array = np.tile(array, 2)
print("重复后的数组:", tiled_array)>重复后的数组: [1 1 2 2 3 3]
>重复后的数组: [1 2 3 1 2 3]
  • 去重
array = np.array([1, 2, 2, 3, 3, 4, 5, 5])# 对数组进行去重
unique_array = np.unique(array)
print("去重后的数组:", unique_array)
>去重后的数组: [1 2 3 4 5]

数据计算

  • 最大值/最小值
array = np.array([3, 1, 2, 5, 4])# 获取数组的最大值和最小值
max_value = np.max(array)
min_value = np.min(array)
# 获取数组的最大值和最小值的索引
max_index = np.argmax(array)
min_index = np.argmin(array)
print("数组的最大值:", max_value, "索引:", max_index)
print("数组的最小值:", min_value, "索引:", min_index)
>数组的最大值: 5 索引: 3
>数组的最小值: 1 索引: 1
  • 求和
array = np.array([[1, 2, 3], [4, 5, 6]])# 计算数组的行和
row_sum = np.sum(array, axis=1)
print("数组的行和:", row_sum)# 计算数组的列和
col_sum = np.sum(array, axis=0)
print("数组的列和:", col_sum)# 计算数组元素的累积和
cumsum_array = np.cumsum(array)
print("数组元素的累积和:", cumsum_array)# 计算数组行元素的累积和
cumsum_array = np.cumsum(array, axis=1)
print("数组行元素的累积和:", cumsum_array)>数组的行和: [ 6 15]
>数组的列和: [5 7 9]
>数组元素的累积和: [ 1  3  6 10 15 21]
>数组行元素的累积和: [[ 1  3  6][ 4  9 15]]
  • 求积
array = np.array([[1, 2, 3], [4, 5, 6]])# 数组求积
prod_result = np.prod(array)
print("数组元素求积:", prod_result)
>数组元素求积: 720
  • 求余
my_array = np.array([1, 2, 3, 4, 5])# 对数组元素进行取余操作
mod_result = np.mod(my_array, 2)
print("数组元素取余操作:", mod_result)
>数组元素取余操作: [1 0 1 0 1]
  • 平均值
array = np.array([3, 1, 2, 5, 4])mean_value = np.mean(array)
print("数组元素的平均值:", mean_value)
>数组元素的平均值: 3.0
  • 其他计算
# 标准差
np.std()
# 方差
np.var()
# 绝对值
np.abs()
# 四舍五入
np.round()
# 向下取整
np.floor()
# 向上取整
np.ceil()
# 截断
np.trunc() 
# 指数
np.power()
# 兑数
np.log()
  • 应用自定义函数
array = np.array([[1, 2, 3], [4, 5, 6]])# 自定义函数
def custom_function(x):return x * 2# 对数组指定轴应用自定义函数
new_array = np.apply_along_axis(custom_function, axis=1, arr=array)
print("应用自定义函数后的数组:\n", new_array)
>应用自定义函数后的数组:[[ 2  4  6][ 8 10 12]]
  • 数组间计算
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])# 数组元素加法
add_result = np.add(array1, array2)
# add_arr = array1 + array2
print("数组元素加法:", add_result)# 数组元素减法
subtract_result = np.subtract(array1, array2)
# sub_arr = array1 - array2
print("数组元素减法:", subtract_result)# 数组元素乘法
multiply_result = np.multiply(array1, array2)
# mul_arr = array1 * array2
print("数组元素乘法:", multiply_result)# 数组元素除法
divide_result = np.divide(array1, array2)
# div_arr = array1/array2
print("数组元素除法:", divide_result)
>数组元素加法: [3 4 6]
>数组元素减法: [-1  0  0]
>数组元素乘法: [2 4 9]
>数组元素除法: [0.5 1.  1. ]
  • 数组间比较
array1 = np.array([1, 2, 3])
array2 = np.array([2, 2, 3])# 相等
equal_result = np.equal(array1, array2)
print("数组元素相等比较:", equal_result)
>数组元素相等比较: [False  True  True]np.not_equal(array1, array2) # 不等于
np.greater(array1, array2)   # 大于
np.less(array1, array2)      # 小于
np.greater_equal(array1, array2)   # 大于等于
np.less_equal(array1, array2)  # 小于等于

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

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

相关文章

Zabbix6 - Centos7部署Grafana可视化图形监控系统配置手册手册

Zabbix6 - Centos7部署Grafana可视化图形监控系统配置手册手册 概述&#xff1a; Grafana是一个开源的数据可视化和监控平台。其特点&#xff1a; 1&#xff09;丰富的可视化显示插件&#xff0c;包括热图、折线图、饼图&#xff0c;表格等&#xff1b; 2&#xff09;支持多数据…

L2-2 口罩发放 (25 分)

坑点&#xff1a; 应该就是题目要求的身份证号唯一 然后是相同的人同一天多次申请 然后是时间相同按照申请记录排序 需要注意的是&#xff0c;不要在同一天内看到满足要求的就直接发放口罩&#xff0c;有可能发完之后发现后面的人的时间更早 #include "bits/stdc.h" …

Web Form

https://github.com/bonfy/go-mega/blob/master/04-web-form.md 从这网站学的 随着我们项目的扩大&#xff0c;代码量会愈来愈多&#xff0c;我们需要建立这样的数据结构来使整个项目看起来没有那么臃肿 package model - 负责数据建模 vm - View Model&#xff0c;定义各种…

【MySQL】增删改查操作(基础)

文章目录 1、新增操作&#xff08;Create&#xff09;1.1单行数据全列插入1.2多行数据指定列插入 2、查询操作&#xff08;Retrieve&#xff09;2.1全列查询2.2指定列查询2.3指定列查询2.4别名&#xff08;as&#xff09;2.5去重&#xff08;distinct&#xff09;2.6排序&#…

机器学习实战18-机器学习中XGBClassifier分类器模型的应用实战,以及XGBClassifier分类器的调优策略

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下机器学习实战18-机器学习中XGBClassifier分类器模型的应用实战&#xff0c;以及XGBClassifier分类器的调优策略。XGBClassifier是基于eXtreme Gradient Boosting (XGBoost)算法的分类器模型&#xff0c;在机器学习领…

[Semi-笔记]Switching Temporary Teachers for Semi-Supervised Semantic Segmentation

目录 概要创新一&#xff1a;Dual Temporary Teacher挑战&#xff1a;解决&#xff1a; 创新二&#xff1a;Implicit Consistency Learning&#xff08;隐式一致性学习&#xff09;挑战&#xff1a;解决&#xff1a; 实验结果小结论文地址代码地址 分享一篇2023年NeurIPS的文章…

python 利用xpath 爬取一周天气

需求&#xff1a; 爬取 中国天气网指定城市一周的天气&#xff0c;以天津为例 实现&#xff1a; 1&#xff0c;先找到一周的数据位置。 divs html.xpath("//div[classhanml]") 2&#xff0c;再遍历每天。 trs div.xpath("./div/div[2]/table//tr[position…

PC发送指令给单片机控制LED(与上一篇文章相反)

此时要重新配置寄存器 &#xff0c;实现电脑往单片机传输数据 1、配置SCON寄存器的REN 即 REN 1 2、有TI&#xff08;发送中断&#xff09;就有RI&#xff08;接收中断&#xff09; 3、优化 发现发送 o 时&#xff0c;D5亮灯会有延迟 下面就是做到真正的无延迟的全双工通信 …

day11 基础函数(二)

知识回顾 ```python # 函数:封装具有某种功能的代码块 函数的定义 def 函数名(): 代码 函数名() # 函数调用 实参:相当于变量值(演员) 形参:相当于变量名(角色) 必须参数(位置参数) 就是必须按照正确的顺序将实参传入到函数中,实参和形参个数必须一一对应 默认参数 de…

深入理解计算机系统 家庭作业 2.85

A 7111.01.11*V E2,M1.11,f0.11 位表示: exp:10000...001其中0有k-2个.frac:1100...000其中0有n-2个 B 有个默认条件就是E>n, En,M1.111...(小数部分n个1),f0.1111(n个1),V exp:111...11其中1有n-1个.frac:111...111其中1有n个 C有个默认条件就是没有符号位.最小的规格…

JS详解-设计模式

工厂模式&#xff1a; 单例模式&#xff1a; // 1、定义一个类class SingleTon{// 2、添加私有静态属性static #instance// 3、添加静态方法static getInstance(){// 4、判断实例是否存在if(!this.#instance){// 5、实例不存在&#xff0c;创建实例this.#instance new Single…

Android 关于apk反编译d2j-dex2jar classes.dex失败的几种方法

目录 确认路径正确直接定位到指定目录确定目录正确&#xff0c;按如下路径修改下面是未找到相关文件正确操作 确认路径正确 &#xff0c;即d2j-dex2jar和classes.dex是否都在一个文件夹里&#xff08;大部分的情况都是路径不正确&#xff09; 直接定位到指定目录 路径正确的…

第12届蓝桥杯省赛 ---- C/C++ C组

文章目录 1. ASC2. 空间3. 卡片4. 相乘5. 路径6.时间显示7.最少砝码8. 杨辉三角形9. 左孩子右兄弟 第12届蓝桥杯省赛&#xff0c;C/C C组真题&#xff0c;第10题不是很清楚&#xff0c;题解不敢乱放&#x1f601;&#x1f601;&#x1f601; 1. ASC 额。。。。 #include <i…

Java NIO Selector选择器源码分析

文章目录 前言Selector类结构Selector抽象类AbstractSelectorSelectorImplWindowsSelectorImpl三种SelectionKey集合 前言 Java NIO&#xff08;New I/O&#xff09;的Selector选择器是一个用于多路复用&#xff08;Multiplexing&#xff09;的I/O操作的关键组件。它允许一个单…

【题目】【网络系统管理】2021年全国职业院校技能大赛模块B--样题(九)

2021年全国职业院校技能大赛 网络系统管理&#xff08;样题9&#xff09;模块B&#xff1a;Windows环境 全国职业院校技能大赛执委会.技术专家组 2021年03月 竞赛简介 请认真阅读以下指引&#xff01; 比赛共4个小时&#xff0c;你必须自行决定如何分配你的时间。 当比赛结…

java-权限修饰符、代码块

一、权限修饰符概念 权限修饰符是用来控制一个成员被访问的范围&#xff0c;可以用来修饰成员变量、方法、构造方法、内部类 二、权限修饰符的分类 举例&#xff1a; 1、private 2、空着不写 3、protected 4、public 三、权限修饰符的使用规则 实际开发中&#xff0c;一般使…

Vue2和3中的插槽区别及其简单案例

vue中的插槽是什么&#xff0c;官方解释是: Vue 实现了一套内容分发的 API&#xff0c;这套 API 的设计灵感源自 Web Components 规范草案&#xff0c;将 <slot> 元素作为承载分发内容的出口… vue2插槽和vue3插槽基本概念是一致的&#xff0c;也是匿名插槽、具名插槽、…

meshgrid如何生成网格

这里举个生成4*4的网格&#xff0c;在目标检测里常用到。 生成的坐标为4 import torch torch.arange(4) tensor([0, 1, 2, 3]) 使用meshgrid生成y、x轴坐标 import torch yv, xv torch.meshgrid([torch.arange(4),torch.arange(4)]) print(yv,xv) tensor([[0, 0, 0, 0], …

Mahalanobis距离(马氏距离)的本质

马氏距离是加权 ℓ 2 \ell_2 ℓ2​范数的特例。 马氏距离是一种基于样本分布的距离&#xff0c;加权矩阵是样本或总体协方差矩阵的逆&#xff0c;其本质为去相关数据标准化&#xff0c;通过数据变换&#xff0c;消除样本中不同特征维度间的相关性和量纲差异。

新概念英语1:Lesson 19 学习笔记

新概念英语1&#xff1a;Lesson 19 学习笔记 What’s the matter? 相当于What’s wrong?或Tell me what’s wrong.这个句型通常用来询问发生了什么事。通常用于询问对方是否有问题或烦恼。它的意思是"有什么事吗&#xff1f;"或“怎么啦”。 这个短语的语气通常…