数据分析-numpy

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.rhkb.cn/news/191085.html

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

相关文章

CSS 滚动捕获 scroll-snap-type

scroll-snap-type 语法实例 捕获轴 y 捕获严格程度 mandatory捕获轴 y 捕获严格程度 proximity同理看下捕获轴 x 一些注意事项兼容性 scroll-snap-type 用来指定一个滚动容器(scroll container)是否是滚动捕获容器(scroll snap container)、捕获的严格程度以及在什么方向上执行…

61基于matlab的GWO算法的参数工具箱,图形界面,目标函数的默认名称为CostFunction。

基于matlab的GWO算法的参数工具箱,图形界面,目标函数的默认名称为CostFunction。如果您查看了CostFunction.m文件,成本函数获取向量([x1 x2…xn])中的变量并返回目标值。可以在该文件中编写目标函数,也可以…

【计算机网络笔记】IP子网划分与子网掩码

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

Perl爬虫程序的框架

Perl爬虫程序的框架,这个框架可以用来爬取任何网页的内容。 perl #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use HTML::TreeBuilder; # 创建LWP::UserAgent对象 my $ua LWP::UserAgent->new; # 设置代理信息 $ua->proxy(http, ); …

ZooKeeper+Kafka+ELK+Filebeat集群搭建实现大批量日志收集和展示

大致流程:将nginx 服务器(web-filebeat)的日志通过filebeat收集之后,存储到缓存服务器kafka,之后logstash到kafka服务器上取出相应日志,经过处理后写入到elasticsearch服务器并在kibana上展示。 一、集群环…

Python实现WOA智能鲸鱼优化算法优化BP神经网络分类模型(BP神经网络分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

web3 React dapp进行事件订阅

好啊,上文web3 React Dapp书写订单 买入/取消操作 我们已经写好了 填充和取消订单 这就已经是非常大的突破了 但是 留下了一个问题 那就是 我们执行完之后 订单的数据没有直接更新 每次都需要我们手动刷新 才能看到结果 那么 今天我们就来看解决这个问题的事件订阅 …

使用 `open-uri.with_proxy` 方法打开网页

Ruby 爬虫程序如下: require open-uri require nokogiri# 定义代理信息 proxy_host jshk.com.cn# 定义要爬取的网页 URL url http://www.example.com# 使用代理信息打开网页 open-uri.with_proxy(proxy_host, proxy_port) do |proxy|# 使用 Nokogiri 库解析网页内…

C++ 11 新特性

目录 1. 支持特性的编译器版本2. 模板表达式中空格3. 空指针4. auto5. 统一初始化6. explict7. 范围for8. default,delete9. 化名模板(alias template)10. using11. noexcept12. override13. final14. decltype15. lambda16. Variadic Templa…

Unity Hub无法登陆的两种终极解决办法

最近换了个电脑,需要重装Unity, 然后unity hub 怎么都无法登陆,登陆不了就不能激活personal license。试了很多次,包括unity hub 2.5.8 和unity hub 3.3都不行,真的是很崩溃。因为是公司的电脑,限制比较多&…

Android 基本属性绘制文本对象FontMetrics

FontMetrics对象 它以四个基本坐标为基准,分别为: ・FontMetrics.top ・FontMetrics.ascent ・FontMetrics.descent ・FontMetrics.bottom 如图: 要点如下: 1. 基准点是baseline 2. Ascent是baseline之上至字符最高处的距离 3. Descent是ba…

聚观早报 |京东11.11公布成绩单;2023数字科技生态大会

【聚观365】11月13日消息 京东11.11公布成绩单 2023数字科技生态大会 TikTok深受英国中小企业青睐 周鸿祎称大模型2年内可“进”智能汽车 双11全国快递业务量达 6.39 亿件 京东11.11公布成绩单 京东11.11公布成绩单:截至11月11日晚23:59,2023年京东…

【Kettle实战】数据分批处理及参数化传递子作业任务

对于大表操作,本来离线数据需要分批处理,刚开始只会用具体日期去做,通过复制多分转换和作业来处理。当日期范围大了后,这是个苦力活儿,kettle里面有参数化传递功能,多动手实操,懂得灵活变通自然…

2023数字科技生态展,移远通信解锁新成就

11月10日,以“数字科技,焕新启航”为主题的中国电信2023数字科技生态大会暨2023数字科技生态展在广州盛大启幕。作为物联网行业的龙头标杆,同时更与中国电信连续多年维持稳定友好的合作关系,移远通信受邀参加本次展会。 在本次展会…

Rust 中的引用与借用

目录 1、引用与借用 1.1 可变引用 1.2 悬垂引用 1.3 引用的规则 2、slice 类型 2.1 字符串字面量其实就是一个slice 2.2 总结 1、引用与借用 在之前我们将String 类型的值返回给调用函数,这样会导致这个String会被移动到函数中,这样在原来的作用域…

Java设计模式-结构型模式-代理模式

代理模式 代理模式静态代理动态代理JDK动态代理CGlib动态代理 代理模式 创建一个代理对象来控制对原始对象的访问,可以用来扩展原始对象的功能,同时保护原始对象 一般使用代理模式的目的有两个: 保护目标对象增强目标对象 代理模式有两种实现…

MATLAB | 官方举办的动图绘制大赛 | 第一周赛情回顾

嘿真的又是很久没见了,最近确实有点非常很特别小忙,今天带来一下MATHWORKS官方举办的迷你黑客大赛第三期(MATLAB Flipbook Mini Hack)的最新进展!!目前比赛已经刚好进行了一周,前两届都要求提交280个字符内的代码来生成…

JVM字符串常量池StringTable

目录 一、StringTable为什么要调整 二、String的基本特性 三、String的内存分配 四、字符串拼接操作 五、intern()方法 六、Stringtable的垃圾回收 七、G1中String去重操作 一、StringTable为什么要调整 jdk7之前,hotspot对于方法区的实现是永久代&#xff…

尝试使用php给pdf添加水印

在开发中增加pdf水印的功能是很常见的,经过实验发现这中间还是会有很多问题的。第一种模式,采用生成图片的方式把需要添加的内容保存成图片,再将图片加到pdf中间,这种方法略麻烦一些,不过可以解决中文乱码的问题&#…

互联网Java工程师面试题·微服务篇·第三弹

目录 34、什么是端到端微服务测试? 35、Container 在微服务中的用途是什么? 36、什么是微服务架构中的 DRY? 37、什么是消费者驱动的合同(CDC)? 38、Web,RESTful API 在微服务中的作用是什…