python数据分析之numpy

news2024/11/18 15:43:10

数据分析之Numpy

1、Numpy的数组对象及其索引

import numpy as np
import numpy as np

a=np.array([1,2,3,4])
print(a)
b=np.array([2,3,4,5])
print(b)

print(a+b)

产生数组

从列表产生数组:

list_array=[1,2,3,4]
a=np.array(list_array)
print(a)

从列表传入:

a=np.array([1,2,3,4])
print(a)

生成全0的数组:

zero=np.zeros(5)
print(zero)

生成全1的数组:

ones=np.ones(5,dtype='int')
print(ones)

可以使用fill方法将数组设为指定值:

list_array=[1,2,3,4]
a=np.array(list_array)
a.fill(5)
print(a)

与列表不同,数组中要求所有元素的dtype都是一样的,如果传入的参数类型与数组类型不一样,需要按照已有的类型进行转换:

a=np.array([1,2,3,4])
a=a.astype('float')
a.fill(2.5)
print(a)

生成整数序列:

a=np.arange(1,10) # 左闭右开
print(a)

生成等差数列:

a=np.linspace(1,10,10) # 左闭右闭
print(a)

生成随机数:

a = np.random.randn(10) # 标准正态分布
print(a)

a=np.random.randint(1,10,10)
print(a)

数组属性

查看数组中数据的类型:

a=np.random.randint(1,10,10)
print(type(a))
print(a.dtype)

查看形状,会返回一个元组,每一个元素代表这一维的元素数目:

a=np.random.randint(1,10,10)
print(a.shape)

查看数组里面元素的数目:

a=np.random.randint(1,10,10)
print(a.size)

查看数组的维度:

a=np.random.randint(1,10,10)
print(a.ndim)

ndarray

ndarray (N-dimensional array)意思是n维数组;n维数组,也称为张量(tensor)或矩阵(matrix)

一个零维数组,也就是一个点,我们称作标量(scalar);一个一维数组,也就是一行或者一列,我们称作向量(vector);一个二维的数组,我们称作矩阵(matrix)

NumPy 最重要的一个特点是其 N 维数组对象ndarray ,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引

  • ndarray 对象是用于存放同类型元素的多维数组。
  • ndarray 中的每个元素在内存中都有相同存储大小的区域。
  • ndarray 内部由以下内容组成:
    • 一个指向数据的指针
    • 数据类型或 dtype
    • 一个表示数组形状(shape)的元组,表示各维度大小的元组
    • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数
a = np.array([[1, 2], [4, 5], [7, 8]])

print("dim:", a.ndim)
print("strides:", a.strides)
print("dtype:", a.dtype)
print("data:", a.data)
print("shape:", a.shape)
print(a)

在这里插入图片描述

ndarray vs list

ndarray 的特点:

  • ndarray 要求所有数据都是同种类型的
  • 每个数据占用空间一样
  • 数组中存储的数据是一段连续的空间

list的特点:

  • 可以容纳不同数据类型
  • list 中只存放对象的引用,再通过引用找到具体的对象
  • 对象的物理地址并不是连续的

在这里插入图片描述

ndarray 查找数据运行效率比list快,同时ndarray 存储的数据是连续的一段空间,而list 对象的物理地址是分散的,ndarray 比 list 更省空间

索引与切片

索引第一个元素:

a=np.array([1,2,3,4])
print(a[0])

修改第一个元素的值:

a=np.array([1,2,3,4])

a[0]=5
print(a)

切片,支持负索引:

a=np.array([1,2,3,4])
print(a[1:3]) # 左闭右开

print(a[1:-1]) # 左闭右开

省略参数:

a=np.array([1,2,3,4])
print(a[-2:])
print(a[::2])
print(a[::-1])

多维数组及其属性

array还可以用来生成多维数组:

a = np.array([[1, 2], [4, 5], [7, 8]])
print(a)

#查看形状
print(a.shape)

#查看数目
print(a.size)

#查看维度
print(a.ndim)
多维数组索引

对于二维数组,可以传入两个数字来索引:

a = np.array([[1, 2], [4, 5], [7, 8]])
print(a[1,1])

可以利用索引赋值:

a = np.array([[1, 2], [4, 5], [7, 8]])
print(a[1,1])

a[1,1]=-1
print(a)

使用单个索引来索引一整行的内容:

a = np.array([[1, 2], [4, 5], [7, 8]])
print(a[1])

print(a[:,1])

切片是引用

切片在内存中使用的是引用机制:

a=np.array([1,2,3,4])
b=a[1:3]
print(b)
b[0]=10
print(a)

引用机制意味着,python并没有为b分配新的空间来存储它的值,而是让b指向了a所分配的内存空间,因此改变b的值会改变a的值;而这种现象在列表中并不会出现。这样做的好处在于,对应很大的数组,不用大量复制多余的值,节约了空间;缺点在于,可能出现改变一个值改变另一个值的情况

一个解决方法是使用copy()方法产生一个复制,这个复制会申请新的内存:

a=np.array([1,2,3,4])
b=a[1:3].copy()
print(b)
b[0]=10
print(a)

花式索引

切片只能支持连续或者间隔的切片操作,要想实现任意位置的操作,需要使用花式索引fancy slicing

一维花式索引

花式索引需要指定索引位置:

a=np.arange(0,100,10)
print(a)

index=[1,2,-3]
y=a[index]
print(y)

使用布尔数组来花式索引:

a=np.arange(0,100,10)
mask=np.array([0,1,1,0,0,1,1,0,0,0],dtype=bool) # 长度必须和数组长度相同
y=a[mask]
print(y)
二维花式索引
a = np.array([[1, 2], [4, 5], [7, 8]])
print(a[(0,1,2),(0,1,0)])

与切片不同,花式索引返回的是原对象的一个复制

“不完全”索引

只给定行索引的时候,返回整行:

a = np.array([[1, 2], [4, 5], [7, 8]])
print(a[:2])

where语句

where()函数会返回所有非零元素的索引

一维数组
a=np.array([1,2,0,3,4])
print(a>2)
print(np.where(a>2))
print(a[a>2])

数组类型

在这里插入图片描述

类型转换
a=np.array([1,2,0,3,4,1.5],dtype=float)
print(a)
asarray函数
a=np.array([1,2.5,3,4])
np.asarray(a,dtype=float)
print(a)
astype方法

astype方法返回一个新数组

a=np.array([1,2,3,4])
b=a.astype(float)
print(a)
print(b)

ndim、shape、dtype、astype的用法

ndim

ndim返回的是数组的维度,返回的只有一个数,该数即表示数组的维度

shape

shape表示各位维度大小的元组。返回的是一个元组

dtype

dtype一个用于说明数组数据类型的对象。返回的是该数组的数据类型

astype

astype转换数组的数据类型

int32 --> float64 完全ok

float64 --> int32 会将小数部分截断

string --> float64 如果字符串数组表示的全是数字,也可以用astype转化为数值类型

2、数组操作

数组排序

sort函数
a=np.random.randint(1,10,10)
print(a)
print(np.sort(a)) # 数组本身没有发生什么变化
argsort函数

argsort函数返回从小到大的排列在数组中的索引位置

a=np.random.randint(1,10,10)
order=np.argsort(a)
print(order)

求和

a=np.random.randint(1,10,10)
print(np.sum(a))

最大值、最小值、均值、标准差、相关系数矩阵

a=np.random.randint(1,10,10)
b=np.random.randint(1,10,10)

# 最大值
print(np.max(a))
print(a.max())

#最小值
print(np.min(a))
print(a.min())

#均值
print(np.mean(a))
print(a.mean())

#标准差
print(np.std(a))
print(a.std())

#相关系数矩阵
print(np.cov([a,b]))

多维数组操作

数组形状

reshape方法不会修改原来数组的值,而是返回一个新的数组

a=np.random.randint(1,10,10)
b=a.reshape(2,5)
print(b)
转置
a=np.random.randint(1,10,10)
b=a.reshape(2,5)
print(b)

print(b.T)
print(b.transpose())
数组连接
x = np.array([[1, 2], [4, 5]])
y = np.array([[11, 12], [14, 15]])

# 默认沿着第一维进行连接
z=np.concatenate((x,y))
print(z)

# 沿着第二维进行连接
z=np.concatenate((x,y),axis=1)
print(z)
x = np.array([[1, 2], [4, 5]])
y = np.array([[11, 12], [14, 15]])

# 沿着第一维进行连接
vertical=np.vstack(x,y)
print(vertical)

# 沿着第二维进行连接
horizontal=np.hstack(x,y)
print(horizontal)

# 连接成三维数组
three=np.dstack(x,y)
print(three)

3、numpy内置函数

numpy 内置函数总结

shape与axis

x = np.array([[1, 2], [4, 5],[7,8]])
print(x.shape) # (3, 2)

sum=np.sum(x,axis=0)
print(sum) # [12 15]

sum=np.sum(x,axis=1)
print(sum) # [ 3  9 15]

参考

1、NumPy Ndarray 对象

2、Python numpy中的ndarray介绍

3、python-Numpy学习之(一)ndim、shape、dtype、astype的用法

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

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

相关文章

PCB设计很简单?生产问题才是考验工程师能力的标准!

BOM清单有误 SMT产线:物料封装怎么和PCB焊盘不一致呢?停线排查。 仓库:我是按照BOM清单发的物料。 硬件研发:哎,BOM整理时马虎了。 过孔焊盘问题 “ 连锡问题 产线维修:怎么这么多连锡导致不良的产品&…

【安信可NB-IoT模组EC系列应用笔记⑧】用NB-IoT模组EC系列了解LwM2M协议并接入云平台

文章目录前言一、测试准备1、硬件准备2、云平台准备二、云平台连接1.注册入网2.读取IMSI及IMEI3.利用IMSI及IMEI创建设备4.LwM2M连接云平台设备三、 数据互交1.ATMIPLNOTIFY 通知属性变化2.ATMIPLREADRSP 返回读取结果3.ATMIPLWRITERSP 发送写入结果4.ATMIPLEXECUTERSP 发送执行…

1.uniapp全局状态管理

概念:把多个组件之间共享数据抽离出来,通过一个“单例模式”进行管理 工具:具备全局状态管理的库 Vuex:全局状态管理中的库 步骤: 1.建立Store文件夹 2.建立index.js文件 3.在main.js中注册Vue插件 4.测试Vuex是否导入成功 …

面试面麻了,别再为难软件测试人员了···

前言 有不少技术友在测试群里讨论,近期的面试越来越难了,要背的八股文越来越多了,考察得越来越细,越来越底层,明摆着就是想让我们徒手造航母嘛!实在是太为难我们这些测试工程师了。 这不,为了帮大家节约时…

基于单片机的双足仿生运动机器人的设计

目录 1 概述 1 1.1 研究背景及意义 1 1.2 机器人的应用领域及发展现状 1 1.2.1 应用领域 1 1.2.2 发展现状 1 1.3 双足机器人设计要求 2 1.3.1 硬件部分 2 1.3.2 软件部分 2 2 系统方案设计 3 2.1 主控芯片选择 3 2.2 机器人自由度选择 3 2.3 驱动方案选择 3 2.4 双足机器人的步…

00后表示真干不过,部门新来的00后测试员已把我卷崩溃,想离职了...

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&#x…

web安全之信息收集

💪💪 web安全之信息收集1.网络入口/信息1.1网络拓扑信息1.2 IP信息1.3线下网络2.域名信息2.1Whios2.2搜索引擎搜索2.3. 第三方查询2.4. ASN信息关联2.5. 域名相关性2.6. 网站信息利用2.7. HTTPS证书2.8. CDN2.9. 子域爆破3.端口信息3.1常见端口3.2端口扫…

具有现代设计和最新Bootstrap版本的数字市场HTML模板

DegMark是具有现代设计和最新Bootstrap版本的数字市场HTML模板。凭借优秀的设计很容易创建虚拟商品交易网站,比如图片素材在线交易,视频文件交易,代码交易等虚拟商品交易。 主要特色 Bootstrapv5 移动响应 FontAwesome图标 jQuery增强 …

metaRTC Visual Studio编译指南

概述 metaRTC windows版本提供qt和vs2019两种编译支持,vs2019编译工程支持从metaRTC6.0版本开始,qt编译在B站有视频教程。 metaRTC5 windows版编译教程_哔哩哔哩_bilibilimetartc5编译教程,windows版本只支持msvc,下载所带第三方库为msvc20…

生物信息-快速序列比对-edlib包安装与使用方法-python和dll

安装 下载:https://github.com/Martinsos/edlib cd build && cmake -D CMAKE_BUILD_TYPERelease .. && make升级cmake https://cmake.org/download/ 下载tar.gz包,我这里下载的是: 拷贝到 /home/xxx/app 下解压&#xff…

初识C#事件

文章目录一 事件1 抛砖引玉案例1.1工具人下楼案例1.1.1 ToolMan.cs1.1.2 LazyMan.cs1.1.3 Program.cs1.1.4 测试结果1.1.5 升级到事件二 委托和事件的区别和联系一 事件 1 抛砖引玉案例 订阅和发布机制 比如说,我要下楼去吃饭,正常情况下我会问一下室友…

设计模式之适配器模式

设计模式之适配器模式 文章目录设计模式之适配器模式1. 定义2. 类型3. 场景4. 优点5. 缺点6. 适配器扩展6. 相关适配器模式7. coding7.1 被 适配者方法7.2 接口7.3 接口的实现7.4 适配者适配被适配者达到Target 目标7.5 类适配器的实现方式,其他的都不变8. 源码解析…

【Django】REST_Framework框架——序列化器serializers源码解析

一、序列化器类——Serializer 1、序列化器的作用 序列化器的使用分两个阶段: 1、在客户端请求时,使用序列化器可以完成对数据的反序列化(将字典格式的数据转化为模型对象)。 2、在服务器响应时,使用序列化器可以完…

网络原理——No.4 传输层_TCP协议中的延迟应答, 捎带应答, 面向字节流与TCP的异常处理

JavaEE传送门JavaEE 网络原理——No.2 传输层_TCP的连接管理 网络原理——No.3 传输层_TCP的滑动窗口, 流量控制与拥塞控制 目录延迟应答捎带应答面向字节流粘包问题TCP 中的异常处理(连接异常)TCP 和 UDP 的应用场景延迟应答 一种提高传输效率的机制, 又是基于流量控制, 来引…

Appinventor——蓝牙app(蓝牙遥控器、串口助手、温湿度显示、切换界面蓝牙依旧保持连接)

App Inventor由谷歌实验室开发,移交麻省理工学院,是一款图形化编程环境,不需要复杂的变成语言,采用搭积木的方式编程,只需将组件拖入即可,简直就是不爱编程党的超级福音 本文搭建了一个蓝牙app&#xff0c…

【CSS】CSS基础认知【CSS基础知识详解】

🌸大家好,我是花无缺,一枚热爱生活的新时代青年,感谢你的阅读🥰~ 👨‍💻个人主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专…

女朋友说她累了之后依然在线,于是20行代码写了个小工具康康发生了什么

近发现女朋友一到晚上总是很忙的样子, 每晚匆匆忙忙道过晚安就说自己累了去睡觉。 是我哪里做的不对吗… 睡就睡了,可是,QQ头像却会偶尔亮起来, 我非常担心,是不是账号被盗了呢? 然后,就想帮…

Django全家桶

Django框架从入门到高级 (一)Django入门 Web应用 详细地址见:https://blog.csdn.net/DiligentGG/article/details/126606099?spm1001.2014.3001.5501 Web框架本质 web框架本质上可以看成是一个功能强大的socket服务端,用户的…

Android专有GitHook完结篇,发布到npm

系列文章目录 Android打造专有hook,让不规范的代码扼杀在萌芽之中 Android打造专有hook第二篇,走进规范第一步 Android打造专有Hook第三篇,实战全量代码规范检查 Android打造专有Hook第四篇,实战增量代码规范检查 Hello啊各位…

【NLP】词向量

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…