Python之数据分析(Numpy的数组切片、数组变维、组合与拆分)
文章目录
- 一、Numpy的切片
- 二、数组变维
- 三、组合与拆分
一、Numpy的切片
1、格式
数组[起始:终止:步长]
2、缺省值
缺省起始:步长为正,首;步长为负,尾
缺省终止:步长为正,尾后;步长为负,首前
缺省步长:1
3、端部切片
靠近端部的一个或几个连续的维度使用缺省切片,可以用“…”表示
- print(a[3:6]): 起始包括终止不包括:有指定起始值,则不包括起始值,即4到6包括6
- print(a[-4:-7:-1]) :步长为-1,起始是倒数第3个即7(不包括),终止是倒数第6个即4(包括)
4、练习代码
import numpy as np# 一维数组的切片取值
# a = np.arange(1,10) # 表示1,2,3,4,5,6,7,8,9
# print(a[:3]) # 与索引不同,缺省起始为首(第一个),即1;这里表示1到3包括3,步长为1
# print(a[3:6]) # 起始包括终止不包括:有指定起始值,则不包括起始值,即4到6包括6
# print(a[6:]) # 缺省终止为尾后(最后一个),即9,这里表示从7到9
# print(a[::-1]) # 缺省起始为首9,缺省终止为尾后1,即所有的数都包括在内,步长为负,所以是逆序
# print(a[:-4:-1]) # 步长为-1,缺省起始是尾,即9;-4是倒数第3个,到7
# print(a[-4:-7:-1]) # 步长为-1,起始是倒数第3个即7(不包括),终止是倒数第6个即4(包括)
# print(a[-7::-1]) # 步长为-1,起始是倒数第6个即4(不包括),终止是缺省终止1(倒序最后一个)
# print(a[...]) # 端部切片,全部取
# print(a[::3]) # 全取,步长3
# print(a[1::3]) # 从1开始取到结束,步长3
# print(a[:9:3]) # 从首取到9(包括),步长3# 二维数组的切片取值
b = np.arange(1, 25).reshape(2, 3, 4) # 将一维的数组变为2*3*4的三维数组
# print(b)
'''
[[[ 1 2 3 4][ 5 6 7 8][ 9 10 11 12]][[13 14 15 16][17 18 19 20][21 22 23 24]]]
'''
print(b[:, 0, 0]) # ":"在页位上,表示每一页;后面的0表示第0行第0列
print(b[0, :, :]) # 第0页上是所有行所有列,即整个第0页
print(b[0, 1, ::2]) # 第0页的第1行,用步长为2从整行取
print(b[:, :, 1]) # 每一页的每一行的第一列,也可表示为print(b[..., 1])
print(b[:, 1]) # 每一页的第一行,没有表示列的
print(b[-1, 1:, 2:]) # 最后一页,第1行(起始不包括)到最后一行,第2列(起始不包括)到最后一列
二、数组变维
1、视图变维: 针对一个数组对象获取其不同维度的视图数组
reshape(新维度)——>数组的新维度视图
ravel()——>数组的一维视图
2、复制变维: 针对一个数组对象获取其不同维度的副本
flatten()——>数组的一维副本
实际上在内部,改变维度其实是重新创建了一个对象,指向原来那个对象包含数据的内存地址
3、就地变维: 直接改变某个数组本身的维度
数组.shape = 新维度
数组.resize(新维度)
4、视图转置: 行列互换,行数变成列数,列数变成行数
数组.transpose()——>数组的转置视图
数组.T:转置视图属性来转置
5、练习代码
import numpy as npa = np.arange(1, 9)
b = a.reshape(2, 4) # 创建了一个a数组的视图b
# print(b)
c = b.reshape(2, 2, 2) # 3页3行3列
# print(c)
d = c.ravel() # 回到原来的数组,一维数组# flatten创建副本,副本与原来的数组是独立的
e = b.flatten()
# print(d)
# print(e)a += 10 # 将a中的元素都+10,则每个reshape来的数组都会变化,而flatten得到的副本不会变
# print(a, b, c, d,sep='\n')
# print(e)# reshape()也可以创建副本,需要用copy()
f = b.reshape(2, 2, 2).copy()
b += 10
# print(b)
# print(f)# 就地变维:直接改变某个数组本身的维度
a.shape = (2, 2, 2)
# print(a)
a.resize(2, 4)
# print(a)# 视图转置
g = a.T # 原本是2*4,现在是4*2
# 或者使用g = a.transpose()
print(g)
三、组合与拆分
1、vstack与vsplit
stack就是栈(堆叠)的意思,split就是分割的意思。
1)垂直组合:numpy.vstack((上,下))
2)垂直拆分:numpy.vsplit(数组,份数)——>子数组集合
3)水平组合:numpy.hstack((左,右))
4)水平拆分:numpy.hsplit(数组,份数)——>子数组集合
5)深度组合:numpy.dstack((前,后))
6)深度拆分:numpy.dsplit(数组,份数)——>子数组集合
7)行组合:numpy.row_stack((上,下))
8)列组合:numpy.column_stack((左,右))
2、练习代码
import numpy as np# 垂直组合vstack
a = np.arange(11, 20).reshape(3, 3)
b = np.arange(21, 30).reshape(3, 3)
# 将a与b组成一个栈,a在上,b在下
c = np.vstack((a, b))
# print(c)# 垂直拆分vsplit
a, b = np.vsplit(c, 2) # 将c拆成2份,结果放在a,b中
# print(a)
# print(b)# 水平组合,水平拆分
c = np.hstack((a, b))
# print(c)
a, b = np.hsplit(c, 2) # 在水平方向将c拆成2份
# print(a, b, sep='\n')# 深度组合,深度拆分
c = np.dstack((a, b))
# print(c)
'''深度组合的结果
[[[11 21][12 22][13 23]][[14 24][15 25][16 26]][[17 27][18 28][19 29]]]
'''
a, b = np.dsplit(c, 2)
# 依然是三维数组,不会回到原来的a,b
# print(a, b, sep='\n')
# 转置两次才可以回到原来的a,b
# print(a.T[0].T, b.T[0].T, sep='\n')# 行列组合
a = a.ravel() # 回到原来的一维数组
b = b.ravel()
c = np.row_stack((a, b)) # 拼接成两个一维数组,呈2行
# print(c)
c = np.column_stack((a, b)) # 呈2列
print(c)
Python之数据分析(Numpy的数组切片、数组变维、组合与拆分)相关推荐
- python输入数组并计算_利用Python进行数据分析——Numpy基础:数组和矢量计算
利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...
- 数据分析-----NumPy中的ndarray数组
目录 Numpy概述 Python中的数组 NumPy中的ndarray ndarray中的数据类型 ndarray多维数组属性 ndarray的创建 NumPy 切片和索引 NumPy 线性代数 总 ...
- python笔记之NUMPY中的掩码数组numpy.ma.mask
python科学计算_numpy_线性代数/掩码数组/内存映射数组 1. 线性代数 numpy对于多维数组的运算在默认情况下并不使用矩阵运算,进行矩阵运算可以通过matrix对象或者矩阵函数来进行: ...
- python数据分析numpy_利用python进行数据分析-NumPy高级应用
1.ndarray对象的内部机理 NumPy的ndarray提供了一种将同质化数据块解释为多维数组对象的方式,ndarray如此强大的部分原因是所有数组对象都是数据块的一个跨度视图. ndarray内 ...
- 【Python】数据分析.numpy.矩阵乘法运算
Python.numpy.矩阵乘法运算 声明:本文章转载于矩阵的乘法运算及Python实现 在讲矩阵相乘之前,我们先看一个生活中的例子. 假如猪肉.牛肉.鸡蛋的价格在一周内不发生变化,记录近三周内的价 ...
- python数据分析 - numpy | ndarray数组 | numpy常用函数
文章目录 数据分析 numpy概述 numpy历史 numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象的创 ...
- python:array和list转换以及数组切片
Python中,数组array和列表list的转换很直接. import numpy as np 1. 首先建立list aaa = [[1,2,3],[4,5,6],[7,8,9],[10,11,1 ...
- Numpy基础(part2)--ndarray数组
鄙人学习笔记,这个笔记以例子为主. 开发工具:Spyder 文章目录 ndarray数组对象的维度操作 视图变维(数据共享) 复制变维(数据独立) 就地变维 ndarray数组切片操作 多维数组的切片 ...
- python dataframe删除某一列_怎样用Python进行数据分析
本文总结了猴子Live课程:怎样用Python进行数据分析,主讲内容包括Numpy和Pandas. 一.一维数据分析 一维数据分析,可以使用Numpy中Array,也可以使用Pandas中的Serie ...
- python机器学习基础--numpy库
目录 numpy库 数据维度的python表示 数组对象ndarray 数组创建与变换 数组变换 数组操作 数组运算 numpy数据存取 csv文件存储 案例1:使用下面代码生成一个csv文件[^1] ...
最新文章
- jQuery带缩略图的宽屏焦点图插件
- yiStack平台维护
- GF(2^8)上的多项式乘法(Matlab实现)
- C++ STL栈Stack的使用
- 【转】Linux中断处理学习笔记
- Ubuntu下gcc多版本共存和版本切换
- 中文 转gbk编码_go查找中文首字母
- linux 的 cat more less 命令有什么区别
- PAT乙级 1023 组个最小数 (20 分)
- 题目管理后台系统_中后台产品最爱的后台:CMS(社区)管理系统搭建
- ajax注册用户名为空,怎么用ajax和js检测用户名是否合法和不能为空
- [Ext JS 4] 布局之实战二 - 中间区块不会自动伸展 (tab)续
- Java8 stream流分页(手动分页)
- Jfinal的七牛云存储插件:qiniuPlugin for jfinal.
- ________________定时器
- linux看门狗机制
- 集线器、交换机、路由器、猫
- vscode 直接调试 ts 文件
- 学java的就业方向_学Java以后的就业方向
- 快速排序,归并排序的递归实现(c++)
热门文章
- ionic4 背景设置动态图片报错WARNING: sanitizing unsafe style value background-image:url
- linux查询匹配个数,查找与linux中目录中的模式匹配的文件数
- go语言与php优势,go语言有什么优点?
- 修改文章更新缓存php,php – 使用liipImagineBundle更新/删除记录时删除/更新缓存的图像...
- mysql增删查改总结_MySQL2 数据增删改查 SQL总结
- 计算机快捷键下档健,电脑文档快捷键
- python字典类型写入文件_python 字典写入文件
- 没有工作经验找it_没有工作经验怎么找工作?
- android评论数据如何返回@用户_教你如何用JavaScript来驯服服务端返回的数据
- mysql显示表格前五行,深入浅出MySQL勘误表