文章目录

  • 一、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的数组切片、数组变维、组合与拆分)相关推荐

  1. python输入数组并计算_利用Python进行数据分析——Numpy基础:数组和矢量计算

    利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...

  2. 数据分析-----NumPy中的ndarray数组

    目录 Numpy概述 Python中的数组 NumPy中的ndarray ndarray中的数据类型 ndarray多维数组属性 ndarray的创建 NumPy 切片和索引 NumPy 线性代数 总 ...

  3. python笔记之NUMPY中的掩码数组numpy.ma.mask

    python科学计算_numpy_线性代数/掩码数组/内存映射数组 1. 线性代数 numpy对于多维数组的运算在默认情况下并不使用矩阵运算,进行矩阵运算可以通过matrix对象或者矩阵函数来进行: ...

  4. python数据分析numpy_利用python进行数据分析-NumPy高级应用

    1.ndarray对象的内部机理 NumPy的ndarray提供了一种将同质化数据块解释为多维数组对象的方式,ndarray如此强大的部分原因是所有数组对象都是数据块的一个跨度视图. ndarray内 ...

  5. 【Python】数据分析.numpy.矩阵乘法运算

    Python.numpy.矩阵乘法运算 声明:本文章转载于矩阵的乘法运算及Python实现 在讲矩阵相乘之前,我们先看一个生活中的例子. 假如猪肉.牛肉.鸡蛋的价格在一周内不发生变化,记录近三周内的价 ...

  6. python数据分析 - numpy | ndarray数组 | numpy常用函数

    文章目录 数据分析 numpy概述 numpy历史 numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象的创 ...

  7. 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 ...

  8. Numpy基础(part2)--ndarray数组

    鄙人学习笔记,这个笔记以例子为主. 开发工具:Spyder 文章目录 ndarray数组对象的维度操作 视图变维(数据共享) 复制变维(数据独立) 就地变维 ndarray数组切片操作 多维数组的切片 ...

  9. python dataframe删除某一列_怎样用Python进行数据分析

    本文总结了猴子Live课程:怎样用Python进行数据分析,主讲内容包括Numpy和Pandas. 一.一维数据分析 一维数据分析,可以使用Numpy中Array,也可以使用Pandas中的Serie ...

  10. python机器学习基础--numpy库

    目录 numpy库 数据维度的python表示 数组对象ndarray 数组创建与变换 数组变换 数组操作 数组运算 numpy数据存取 csv文件存储 案例1:使用下面代码生成一个csv文件[^1] ...

最新文章

  1. jQuery带缩略图的宽屏焦点图插件
  2. yiStack平台维护
  3. GF(2^8)上的多项式乘法(Matlab实现)
  4. C++ STL栈Stack的使用
  5. 【转】Linux中断处理学习笔记
  6. Ubuntu下gcc多版本共存和版本切换
  7. 中文 转gbk编码_go查找中文首字母
  8. linux 的 cat more less 命令有什么区别
  9. PAT乙级 1023 组个最小数 (20 分)
  10. 题目管理后台系统_中后台产品最爱的后台:CMS(社区)管理系统搭建
  11. ajax注册用户名为空,怎么用ajax和js检测用户名是否合法和不能为空
  12. [Ext JS 4] 布局之实战二 - 中间区块不会自动伸展 (tab)续
  13. Java8 stream流分页(手动分页)
  14. Jfinal的七牛云存储插件:qiniuPlugin for jfinal.
  15. ________________定时器
  16. linux看门狗机制
  17. 集线器、交换机、路由器、猫
  18. vscode 直接调试 ts 文件
  19. 学java的就业方向_学Java以后的就业方向
  20. 快速排序,归并排序的递归实现(c++)

热门文章

  1. ionic4 背景设置动态图片报错WARNING: sanitizing unsafe style value background-image:url
  2. linux查询匹配个数,查找与linux中目录中的模式匹配的文件数
  3. go语言与php优势,go语言有什么优点?
  4. 修改文章更新缓存php,php – 使用liipImagineBundle更新/删除记录时删除/更新缓存的图像...
  5. mysql增删查改总结_MySQL2 数据增删改查 SQL总结
  6. 计算机快捷键下档健,电脑文档快捷键
  7. python字典类型写入文件_python 字典写入文件
  8. 没有工作经验找it_没有工作经验怎么找工作?
  9. android评论数据如何返回@用户_教你如何用JavaScript来驯服服务端返回的数据
  10. mysql显示表格前五行,深入浅出MySQL勘误表