数据分析-numpy

news2024/10/6 6:02:12

numpy

numpy

  • numpy
    • 简介
    • 优点
    • 下载
    • ndarray的属性
    • 输出
    • 数据类型
    • routines 函数
    • ndarray对象的读写操作
    • ndarray的级联和切分
      • 级联
      • 切分
    • ndarray的基本运算
    • 广播机制(Broadcast)
    • ndarry的聚合操作
    • 数组元素的操作
    • numpy 数学函数
    • numpy 查找和排序
  • 写在最后面

标题

简介

numpy是一个基于python的扩展库


优点

提供了高纬数组对象ndarray,运算的速度碾压python的list,提供了各种高级数据编程工具,如矩阵计算,向量运算快速筛选,IO操作,傅里叶变换,线性代数,随机数等


下载

下载非常的简单在cmd中执行以下命令即可

pip install numpy 

ndarray的属性

1.ndim:维度

# 导入模块
import numpy as np 
# 生成一个ndarray对象
arr1 = np.array([1,2,3])
arr1.ndim    #   1
# 生成一个ndarray对象
arr2 = np.array([[1,2,3],[4,5,6]])
arr2.ndim    #   2 

2.shape:形状(各维度的长度)

# 导入模块
import numpy as np 
# 生成一个ndarray对象
arr1 = np.array([1,2,3])
arr1.shape    # (2, 3)
# 生成一个ndarray对象
arr2 = np.array([[1,2,3],[4,5,6]])
arr2.shape    #  (3,)

3.size:(总长度)

# 生成一个ndarray对象
arr1 = np.array([1,2,3])
arr1.size  		# 3
arr2 = np.array([[1,2,3],[4,5,6]])
arr2.size         #  6

4,dtype:元素类型

# 生成一个ndarray对象
arr1 = np.array([1,2,3])
arr1.dtype  		# dtype('int32')
arr2 = np.array([[1,2,3],[4,5,6]])
arr2.dtype         # dtype('int32')

type(arr)和dtype(arr)的区别:
type是查询arr这个数据对象的类型,而dtype是查询arr数组中的内容的数据类型


输出

1.display(建议使用)

arr1 = np.array([1,2,3])
arr1.ndim
display(arr1)

2.print

arr1  = array([1, 2, 3])

print(arr1)
[1 2 3]

3.output


数据类型

数据类型:numpy设计初衷是用于运算 的所以对数据类型进行 统一优化(统一是为了提高运算速度)
注意:
numpy默认是ndarray的所有元素的类型相同的
如果传进来的列表中的包含不同类型,则统一为同一类型,
优先级:str->float->int
U表示unicode的简写形成


routines 函数

1.np.ones(shape,dtype=none,order=‘c’)
生成一个都是1的高维数组

shape:形状 dtype:形状

np.ones((3,4),dtype=np.float32)


2.np.zeros(shape,dtype=none,order)
生成一个都是0的高维数组

np.zeros((3,4),dtype=np.int32)

在这里插入图片描述
3.np.full(shape,full_value,odert=‘c’)
生成一个指定值的高维数组

full_value:指定的值

np.full((3,4),fill_value=5) 

在这里插入图片描述
4.np.eye(n,m=None,k=0,dtype=float)
生成一个默认情况下,对角线

第一个参数:输出方阵的规模,即行数
第二个参数:输出的方阵即列数如果默认,默认为第一参数的值
第三个参数:默认情况下输出的是对角线都是1 其余的都是0的方阵如果k为正整数,则在又上方的第k条对角线全是1其余的都是0,k为负整数则在左下方第k条对角线全是1其余的都是0
第四个参数:数据类型,返回数据类型

np.eye(3,4,1,np.int32)

在这里插入图片描述
5.np.linespace(start,stop,num=50,endpoint=True,restep=False,dtype=None)
生成一个等差数列
start:开始的数值 stop:停止的值 num:取多少个值 endpoint=是否保留最后一个值 retstep:默认为Flase如果开启则返回的序列结果为一个元组,对应的序列在【start,end】

np.linspace(0,100,num=50,endpoint=True)

在这里插入图片描述
6.np.range(start,stop,[step],dtype=None)
生成一个等差数组

import numpy as np
np.arange(start=0,stop=100,step=2)

在这里插入图片描述

araneg 和linespace的区别
linespace通过指定需要多个数值组成的数组,arange:通过设置步长确定数值

7.np.random.randint(low,hight=None,size=None,dtype=None)
生成 一个随机的整数类型的数组
在这里插入图片描述
8.正态分布
np.random,randn()
** 标准的正态分布**
标准的正态分布

np.random.normal() 普通的正态分析
从正态(高斯)分布中抽取随机样本

参数:
loc:float 或 array_like 的浮点数
分布的均值(“中心”)。
scale:缩放浮点数或浮点数的array_like
分布的标准差(分布或“宽度”)。必须是 非负数。
size: int 或 int 的元组,可选
输出形状。如果给定的形状是,例如,,则绘制样本。如果 size 为(默认值), 如果 和 都是标量,则返回单个值。 否则,将抽取样本。(m, n, k)m * n * kNonelocscalenp.broadcast(loc, scale).size

mu, sigma = 0, 0.1 # mean and standard deviation
s = np.random.normal(mu, sigma, 1000)
abs(mu - np.mean(s))
abs(sigma - np.std(s, ddof=1))
import matplotlib.pyplot as plt
count, bins, ignored = plt.hist(s, 30, density=True)
plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *
               np.exp( - (bins - mu)**2 / (2 * sigma**2) ),
         linewidth=2, color='r')
plt.show()

在这里插入图片描述
9.np.random.random(size)
生成0-1的随机数左闭右开

参数:
size:大小

np.random.random((10,10))

在这里插入图片描述
10.np.random.permutaion(10)
生成随机索引可以与列表索引进行数组的随机索引

num:生成随机索引的个数

np.random.permutation(10)

生成随机索引
11.np.random.seed(0)
设置种子以后,可以使随机不再发生变化

num:设置种子数
在这一步只设置种子,并不产生随机数

np.random.seed(10)
np.random.randint(1,10)

在这里插入图片描述

ndarray对象的读写操作

索引的访问
数组对象可以使用索引的方式进行获取,高维数组访问使用【dim1_index,dim2_index,…】
间接访问:arr[index][index]

# 间接访问
arr3 = np.random.randint(0,10,size=(2,5))
#1.arr3 首先读取出这个操作
arr3[1][2]

间接对象
array提供的访问方式:arr[index1,index2]

# 直接访问
arr3 = np.random.randint(0,10,size=(2,5))
#1.arr3 首先读取出这个操作
arr3[1][2]

直接访问
列表访问:先将需要获取的数值的索引位置统一存放在一个列表中,然后再使用索引进行逐个获取。

arr1 = np.random.randint(0,100,size=10)
index = [1,3]
arr1[index]

列表访问

切片访问:通过切片进行数组的获取

arr2 = np.random.randint(0,100,size=(5,5))
arr2[1:4:5]
arr2[::-1]

在这里插入图片描述
通过布尔类型进行获取

arr3 = np.random.randint(0,100,size=(5,))
bool_index = [False,True,False,True,False]
arr3[bool_index]

布尔列表

数组支持访问形式:int 【int】 切片 bool类型


ndarray的级联和切分

级联

级联的注意事项
1.级联的参数是列表:一定要加中括号或者小括号
2.维度相同

# 维度不同无法级联
r1 = np.random.random(size=(3,))
r2 = np.random.random(size=(3,4))
r3 = np.concatenate((r1,r2))
r3
 ValueError: all the input arrays must have same number of dimensions

3.形状相同

# 不同形状无法级联
s1 = np.random.random(size=(3,4))
s2 = np.random.random(size=(3,3))
s3 = np.concatenate((s1,s2))
#ValueError: all the input array dimensions except for the concatenation axis must match exactly

4.级联的方向是默认的是shape这个元组的第一个值所代表的方向
5.可以通过axis参数修改级联的方向
1.np.concatenate((a1,a2),axis=0)

参数:
(a1,a2) :要拼接的数组 axis:拼接的方向
axis=0 的时候数组进行纵连接 axis=1:数组进行横向拼接

a1 = np.random.randint(0,10,size=(3,4))
a2 = np.random.randint(10,20,size=(3,4))
print(a1)
print(a2)
np.concatenate((a1,a2),axis=0)
np.concatenate((a1,a2),axis=1)

级联

2.np.hstack((a1,a2))
横向拼接

参数
(a1,a2): 要拼接的数组

# 进行横向级联
np.hstack((a1,a2))

横向级联

切分

与级联类似以下三个函数可以完成切分工作:

# 创建一个可以拆分的数组
a1,a2 = np.split(arr,indices_or_sections=2,axis=0)
display(a1,a2)

切分
1.np.split(arr,切分规则,轴向)
如果切分规则为数组【m:n】那么数组的分割方式为0:m m:n n:最后

a1,a2 = np.hsplit(arr,2)
display(a1,a2)

2.np.hsplit()
横向切分

arr:要拆分的数组 indices_or_sections:拆分规则

a1,a2 = np.hsplit(arr,2)
display(a1,a2)

在这里插入图片描述
3.vsplit()
纵向切分

arr:要拆分的数组 indices_or_sections:拆分规则

a1,a2 = np.vsplit(arr,2)
display(a1,a2)

在这里插入图片描述

ndarray的基本运算

基本运算规则:
如果数组的形状相同的时候使用加法:相对应位置的数值进行计算
如果数组与单个数值进行计算:这个数值与数组的每个位置的数值进行计算

广播机制(Broadcast)

ndarray的广播机制的两条规则:

  • 两个数组的后缘维度(即从末尾到开始的算起的为度)轴长度相符
  • 或者其中一方长度为1

符合上面的两个规则的,则认为他们广播兼容的。广播会在缺失和(或)长度为1 的维度上进行

广播的过程:
将维度少和维度多的数组并且符合上面的规则将会把维度少的数值进行数组的扩展到相同的形状再进行相对位置的运算最后得到结果
在这里插入图片描述
ndarray可以和任何整数进行广播

ndarry的聚合操作

1.求和 arr.sum()

import numpy as np
data = np.random.randint(0,100,size=5)
data
data.sum()

求和
2.arr.nannum()
计算带有空值的数组

a1 = np.array([1,2,3,np.nan])
np.nansum(a1)

带有空值的
3.arr.max()|arr.min()

获取数组中的最大值或最小值

a1 = np.array([1,2,3,11])
# 最大值
np.max(a1)
# 最小值
np.min(a1)

最大值最小值
4.any() | all()
np.any():
一个数组中如果数组中至少有一个返回的结果就为True

np.all(np.array([True,True,False,False]))

在这里插入图片描述
np.all()
一个数组中。如果数组中全部为True则返回True否则返回的结果就是Flase
5.np.nan
np.nan是一个浮点数,在python中None是None类型
np.nan与任何值相加都会得到np.nan

数组元素的操作

添加元素
numpy.append
在数组末尾添加值。追加会为分配整个数组,并且把原来的数组复制到新的数组

参数
arr:原数组 values:追加的值(可以为数组) axis :要追加的形式(追加到行还是列)
注意:如果是追加数组,需要将追加的数组设置为相同维度的数组进行追加

a1 = np.random.randint(1,100,size=(6,6))
np.append(a1,[[64, 63, 13, 89, 33, 55]],axis=0)

在这里插入图片描述

如果没有设置轴,数组将会被展开

a1 = np.random.randint(1,100,size=(6,6))
a2 = np.array([1,2,3,4,5,6])
a3 = np.append(a1,a2)
display(a1,a2,a3)

在这里插入图片描述
插入元素
np.insert
函数在给定索引之前,沿着给定的轴在输入数值中插入的值

参数:
arr:被插入的数组 obj:要插入的位置 values:要插入的值

a1 = np.random.randint(1,100,size=(6,6))
np.insert(a1,1,[64, 63, 13, 89, 33, 55],axis=1)

如果没有提供轴,数据将会被展开

a1 = np.random.randint(1,100,size=(6,6))
np.insert(a1,1,10)

插入数据
删除元素
np.delete
函数返回输入数值中删除指定数组的新数组

a1 = np.random.randint(1,100,size=(6,6))
np.delete(a1,[32, 10, 86,  3, 34, 46],axis=0)

在这里插入图片描述

如果没有提供轴,数据将会被展开

a1 = np.random.randint(1,100,size=(6,6))
np.delete(a1,[32, 10, 86,  3, 34, 46])

在这里插入图片描述


数组变形(reshape)
np.reshape:函数可以在不改变数据条件下修改形状

参数:
arr:要改变形状的数组 new_shape:想要修改成的形状,整数或者整数数组,新的形状应该兼容之前的形状
order:‘c’ — 按行 ‘F’ — 按列 ‘A’- -----按照原来的顺序 ‘K’-----元素在内存中出现的顺序

a1 = np.random.randint(1,100,size=(6,6))
np.reshape(a1,(4,9))

在这里插入图片描述

注意:不能显示的使用shape参数,否则会报错

np.reshape(a1,shape=(4,9))

在这里插入图片描述

数组的迭代器
ndarray.flat
两段代码的最后实现的效果是一样的

for i in a1.flat													for i in a1:
								========>								for i1 in i:												
																			 print(i1)
    print(i)

数组的扁平化处理
ndarray.flatten():返回一份展开数组的拷贝,对拷贝的数组进行修改,对原来的数组不会影响到原来的数组
ndarray.ravel():展开数组,返回一个展开的数组引用,修改会影响原始数组。
数组翻转
np.transpose:翻转数组的维度

这个函数只有两个参数
a:需要翻转的数组 ,axes=选择的列或行

a1
a2 = np.transpose(a1)
display(a1,a2)

数组翻转


numpy 数学函数

三角函数(这里需要注意:三角函数接受的参数是弧度不是角度):
np.sin() np.cos np.tan()

data=np.random.random(size=10)*2*np.pi-np.pi
np.sin(data)
np.cos(data)
np.tan(data)

数学 函数
舍入函数
np.around()

参数:
a:数组 decimals:舍入的小数位。默认值为0,如果为负,整数将四舍五入到小数点最左侧的位置

np.around(np.pi,2)

舍入函数
算数函数
加减乘除:add(),subtract(),multipy(),divide()
np.add()

import numpy as np
# 1+1
np.add(1,1)

在这里插入图片描述

# 7-1
np.subtract(7,1)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

幂运算(可以做开放运算):

np.power(16,2)

幂运算

求余运算:

np.mod(10,3)

求余数

自然底数的对数:

np.log(),np.log^2 ()
,np.log^10()

np.log(10)

在这里插入图片描述


numpy 查找和排序

查找索引:
argmax:返回最大的值的索引位置

a1 = np.array([1,2,3,4,5,56])
np.argmax(a1)

在这里插入图片描述
argmin:返回最小的值的索引位置

a1 = np.array([1,2,3,4,5,56])
np.argmin(a1)

在这里插入图片描述
条件查询
np.where:函数返回输如数组中给定条件的元素索引

参数:
condition:条件表达式

a1 = np.array([1,2,3,4,5,56])
np.where(a1>10)

条件查询
快速索引
np.start()与ndarray.stort()都可以进行排序但是有区别
np.start()不改变输出方式 ndarray.sort() 本地处理,不占用空间,但是改变输出的方式

data = np.random.randint(1,100,10)
np.sort(data)
data.sort()

在这里插入图片描述

索引排序
np.argsort():函数返回的是数组从小到大的索引值

data = np.random.randint(0,10,10)
np.argsort(data)

在这里插入图片描述

部分索引
np.partition(a,k):当k为正数的时候得到最小的k个数,当k为负数的时候,得到最大的k个数

他只是给k个数进行排序不是显示k个数

data = np.random.randint(0,10,10)
np.partition(data,2)

在这里插入图片描述


写在最后面

个人笔记,如果有错误的地方希望各位大佬帮忙指正纠正。

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

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

相关文章

k8s的安装部署,详细过程展示(保姆级安装教程)

k8s应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应用程序定义资源使用…

PanNet: A deep network architecture for pan-sharpening(ICCV 2017)

文章目录 AbstractIntroduction过去方法存在的问题我们提出新的解决方法Related work PanNet: A deep network for pan-sharpening(PanNet:用于泛锐化的深度网络)Background and motivationPanNet architectureSpectral preservationStructural preserva…

网络原理---拿捏HTTP协议:请求和响应

文章目录 认识请求首行URLURL的格式URL的encode和decode 版本号方法GET方法POST方法GET VS POST 请求头:headerHostContent-Length 和 Content-TypeUser-Agent(UA)RefererCookie 空行正文:body如何构造HTTP请求?浏览器…

浙大恩特客户资源管理系统任意文件上传漏洞复现

0x01 产品简介 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源,提升销售和市场营销的效果。 0x02 漏洞概述 浙大恩特客户资源管理系统中fileupload.jsp接口处存在文件上传漏洞,未经身份认…

rv1126-rv1109-添加分区,定制固件,开机挂载功能

===================================================================== 修改分区: 这里是分区的txt文件选择; 这里是分区的划分,我这里回车了,方便看 FIRMWARE_VER: 8.1 MACHINE_MODEL: RV1126 MACHINE_ID: 007 MANUFACTURER: RV1126 MAGIC: 0x5041524B ATAG: 0x00200…

Ubuntu18.04.6共享文件夹的创建,以及在哪打开共享文件夹

目录 1、打开虚拟机的设置页面 2、设置共享文件夹 3、确认是否成功设置共享文件夹 4、完成后在进入到/mnt/hgfs ls查看,发现共享文件夹已经出现可以使用 1、打开虚拟机的设置页面 两种方式: (1)直接点击“编辑虚拟机设置” …

android自定义switch颜色

效果图&#xff1a; 原生样式和自己app的主题颜色不搭配&#xff0c;就可以这样自定义颜色样式。以下代码均可直接复制粘贴使用&#xff0c;且均有注释。 实现&#xff1a; 1、 新建drawable/switch_custom_thumb_on.xml&#xff08;滑块开启状态 &#xff09; <?xml ve…

DDD系列 - 第2讲 从贫血模型、事务脚本到面向对象(富血模型)、DDD领域模型的跨越

目录 一、灵魂拷问二、CRUD Boy现状三、贫血模型四、事务脚本五、从贫血模型演变到面向对象&#xff08;富血模型&#xff09;六、借助DDD领域模型摆脱事务脚本七、更多 一、灵魂拷问 Java作为面向对象的编程语言&#xff0c;使用Java编程的你面向对象了吗&#xff1f; 二、C…

“三位一体”超级混沌工程主要特点及功能

“三位一体”超级混沌工程X-Chaos主要包括基础故障编排、业务场景故障编排、演练场景编排、故障库管理、演练场景管理、演练计划管理、演练观测和演练报告等模块&#xff0c;支持对传统架构、云环境以及国产化基础环境的IT系统进行故障演练。本文将介绍混沌工程主要特点及主要功…

剪贴板劫持--PasteJacker的使用

启动 PasteJacker [1] Windows [2] Linux [3] Exit第一次是让我们选择要攻击针对的目标系统&#xff0c;这里以Windows系统为例&#xff0c;即我自己的物理机 因此键入 1 &#xff0c;回车 [1] Download and execute a msfvenom backdoor using certutil (Web delivery Past…

现在就是成为“新程序员”的黄金时刻!

整理 | 王启隆 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; “自然语言代替了编程语言&#xff0c;大大地降低了程序员的门槛。现在&#xff0c;ChatGPT 将全球的知识库和代码都放在了你的手中&#xff0c;只要有想象力&#xff0c;人人都能成为「新程序员」…

一周成功拿下4个offer的软件测试面试题,面试必看系列

前言&#xff1a; 压到就是赚到&#xff0c;面试通过的机率就更大&#xff0c;干就完了铁子 【文章末尾给大家留下了大量的福利】 ​编辑 1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 参考答案&#xff1a; 兼容测试主要是检查软件在不同的硬件平…

腾讯云2023年双11活动:云服务器1.8折起,还可领取9999元代金券!

2023年双11腾讯云推出了11.11云上盛惠大促活动&#xff0c;包括秒杀专区、服务器买赠、新人专区、代金券专区、境外优选、新老同享、续费专区以及热门上云场景等满足新用户、老用户、企业用户对云计算服务的各种需求。 一、腾讯云双11活动地址 活动入口&#xff1a;点此直达 …

【高等数学】导数的应用

导数的应用 1、洛必达法则1.1、引例1.2、内容1.3、证明1.4、洛必达的应用总结 1.5、注意 2、泰勒公式2.1、解决的问题2.2、引例2.3、内容2.3.1、带Peano余项的泰勒公式2.3.2、带Lagrange余项的泰勒公式2.3.3、麦克劳林公式2.3.4、几个初等函数的麦克劳林公式 2.4、证明2.5、泰勒…

智慧城市建设解决方案分享【完整】

文章目录 第1章 前言第2章 智慧城市建设的背景2.1 智慧城市的发展现状2.2 智慧城市的发展趋势 第3章 智慧城市“十二五”规划要点3.1 国民经济和社会发展“十二五”规划要点3.2 “十二五”信息化发展规划要点 第4章 大数据&#xff1a;智慧城市的智慧引擎4.1 大数据技术—智慧城…

css实战——清除列表中最后一个元素的下边距

需求描述 常见于列表的排版&#xff0c;如文章列表、用户列表、商品列表等。 代码实现 <div class"listBox"><div class"itemBox">文章1</div><div class"itemBox">文章2</div><div class"itemBox"…

java语法:继承与多态

导言: 在Java中&#xff0c;继承和多态是面向对象编程的两个重要概念&#xff0c;它们允许我们创建更加灵活和可扩展的代码。本文主要对继承和多态的语法和一些细节做一个介绍和解释。 目录 导言: 正文&#xff1a; 一.继承 1. 基本语法 2. 继承的特点 3.子类中访问父类…

新品上市|米尔RZ/G2UL核心板上市,助力工业4.0发展!

浩瀚的芯片海洋中能被人记住的寥寥无几&#xff0c;那些在人们脑海中留下印记的往往是踩中了时代的脉搏。32位ARMv7架构的A7/A8系列处理器自发布以来&#xff0c;以ARM9处理器的价格&#xff0c;升级了工业领域绝大部分应用需求&#xff0c;成为最近十年最受欢迎的通用工业级AR…

怎么写日语开发信?写外贸日语开发信技巧?

如何写好日语开发信&#xff1f;日语开发信格式是怎么样的&#xff1f; 无论您是初学者还是有经验的营销专家&#xff0c;都需要掌握一些关键技巧&#xff0c;以确保您的邮件在日本市场取得成功。蜂邮将向您介绍怎样写一封令人印象深刻的日语开发信&#xff0c;以吸引潜在客户…

2022年09月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 下列不是评判一个算法优劣的标准是?( ) A: 时间复杂度 B: 空间复杂度 C: 难易度 D: 健壮性 答案:C 评价算法的优劣是:时间复杂度,空间复杂度,健壮性,正确性,可读性。因此选…