当前位置: 首页 > news >正文

【数据分析】第三章 numpy(2)

3.8 数组操作

在数据分析中,我们经常需要用已有的数组来创建新的数组。本节我们将学习如何通过连接(concatenation)或切分(splitting)已有数组来创建新的数组。

3.8.1 连接数组

你可以把多个数组整合在一起,形成一个包含这些数组的新数组。NumPy中使用了“栈”(stack)这个概念,提供了几个运用栈概念的函数。

  • vstack()函数:执行垂直入栈操作,把第二个数组作为行添加到第一个数组的下方,数组朝垂直方向(轴0)生长。

  • hstack()函数:执行水平入栈操作,把第二个数组作为列添加到第一个数组的右侧,数组朝水平方向(轴1)生长。

>>> A = np.ones((3, 3)) # 创建一个3x3的都是1的数组
>>> A
array([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]])
>>> B = np.zeros((3, 3)) # 创建一个3x3的都是0的数组
>>> B
array([[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]])>>> np.vstack((A, B)) # 垂直堆叠 A 在 B 上方
array([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]])>>> np.hstack((A, B)) # 水平堆叠 A 在 B 左侧
array([[1., 1., 1., 0., 0., 0.],[1., 1., 1., 0., 0., 0.],[1., 1., 1., 0., 0., 0.]])

另外两个用于多个数组之间栈操作的函数是column_stack()row_stack()。这两个函数与上面两个不同之处在于,它们更常用于将一维数组作为列或行压入栈结构,以形成一个新的二维数组。

>>> a = np.array([0, 1, 2])
>>> b = np.array([3, 4, 5])
>>> c = np.array([6, 7, 8]) >>> np.column_stack((a, b, c)) # 将a,b,c作为列堆叠起来
array([[0, 3, 6],[1, 4, 7],[2, 5, 8]])>>> np.row_stack((a, b, c)) # 将a,b,c作为行堆叠起来(效果同vstack对于一维数组)
array([[0, 1, 2],[3, 4, 5],[6, 7, 8]])
3.8.2 数组切分

上面讲了使用栈操作把多个数组组装到一起的方法。接下来看一下它的逆操作:把一个数组分为几部分。在NumPy中,该操作要用到切分方法。同理,我们也有一组函数:

  • hsplit()函数:执行水平切分,将数组按照宽度切分为多部分。

  • vsplit()函数:执行垂直切分,将数组按照高度切分为多部分。

>>> A = np.arange(16).reshape((4, 4))
>>> A
array([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11],[12, 13, 14, 15]])

水平切分数组的意思是把数组按照宽度切分为两部分,例如4x4矩阵将被切分为两个4x2矩阵。

>>> B, C = np.hsplit(A, 2) # 将A水平切分为2部分
>>> B
array([[ 0,  1],[ 4,  5],[ 8,  9],[12, 13]])
>>> C
array([[ 2,  3],[ 6,  7],[10, 11],[14, 15]])

反之,垂直切分指的是把数组按照高度分为两部分,如4x4矩阵将被切为两个2x4矩阵。

>>> B, C = np.vsplit(A, 2) # 将A垂直切分为2部分
>>> B
array([[ 0,  1,  2,  3],[ 4,  5,  6,  7]])
>>> C
array([[ 8,  9, 10, 11],[12, 13, 14, 15]])

split()函数更为通用和复杂,可以把数组分为几个不对称的部分。此外,除了传入数组作为参数外,你还得指定被切分部分的索引列表

  • 如果指定axis=1,索引表示列索引

  • 如果axis=0,索引表示行索引

例如,要把矩阵A切分为三部分:第一部分为第一列,第二部分为第二列、第三列,而第三部分为最后一列。你需要像下面这样指定切分点的索引值[1, 3]

>>> A1, A2, A3 = np.split(A, [1, 3], axis=1) # 在列索引1和3处切分
>>> A1 # 第一部分:从0列到1列(不含1列),即第0列
array([[ 0],[ 4],[ 8],[12]])
>>> A2 # 第二部分:从1列到3列(不含3列),即第1、2列
array([[ 1,  2],[ 5,  6],[ 9, 10],[13, 14]])
>>> A3 # 第三部分:从3列到最后,即第3列
array([[ 3],[ 7],[11],[15]])

你也可以按行切分,方法相同。

>>> A1, A2, A3 = np.split(A, [1, 3], axis=0) # 在行索引1和3处切分
>>> A1 # 第一部分:从0行到1行(不含1行),即第0行
array([[0, 1, 2, 3]])
>>> A2 # 第二部分:从1行到3行(不含3行),即第1、2行
array([[ 4,  5,  6,  7],[ 8,  9, 10, 11]])
>>> A3 # 第三部分:从3行到最后,即第3行
array([[12, 13, 14, 15]])

split()函数实际上是vsplit()hsplit()函数的通用版本。


3.9 常用概念

这一节将介绍NumPy库的几个常用概念。我们会讲解副本(Copy)视图(View)的区别,其中着重讲解两者返回值的不同点。我们还会介绍NumPy函数中很多运算隐式使


文章转载自:

http://3EVswOlv.ydryk.cn
http://W1UFrf0U.ydryk.cn
http://4yeDZGqr.ydryk.cn
http://oHlW0ECX.ydryk.cn
http://BPpf1O3P.ydryk.cn
http://JCgenaCz.ydryk.cn
http://dpzd3vtZ.ydryk.cn
http://YEMh3oVk.ydryk.cn
http://f4lMKIoY.ydryk.cn
http://lm9aHjdz.ydryk.cn
http://lUr1WSCQ.ydryk.cn
http://x4IwfUt6.ydryk.cn
http://Ggq5GKcT.ydryk.cn
http://42OH1OOQ.ydryk.cn
http://b6p1YYRn.ydryk.cn
http://UoB9WPa2.ydryk.cn
http://VL1XBj0g.ydryk.cn
http://JqPuFYbM.ydryk.cn
http://5taJhOsv.ydryk.cn
http://eJLDmJX6.ydryk.cn
http://tGHRCwn5.ydryk.cn
http://7ue4uz6v.ydryk.cn
http://CtBdQjws.ydryk.cn
http://DvQQXi34.ydryk.cn
http://s8hRpI0X.ydryk.cn
http://iWykNfje.ydryk.cn
http://rmZPQoX5.ydryk.cn
http://xWBA88PN.ydryk.cn
http://aoxGXSS3.ydryk.cn
http://67HQMUvs.ydryk.cn
http://www.dtcms.com/a/227422.html

相关文章:

  • 精读92页《数据资产入表全流程指南》【附全文阅读】
  • SQL进阶之旅 Day 11:复杂JOIN查询优化
  • vue-13(延迟加载路由)
  • 【看到哪里写到哪里】在C里面怎么传递二维数组呢?
  • Python实例题:自联想器的Python实现
  • 腾讯位置商业授权沿途搜索服务开发指南
  • hot100 -- 7.链表系列
  • 2506js,活扩控件
  • 无法访问公网或 DNS 解析失败怎么办?
  • 【Python 算法零基础 4.排序 ⑦ 桶排序】
  • PythonWeb项目开发脚手架
  • 无线错误排查、排错命令
  • sctpscan:用于发现 SCTP 网络扫描器!全参数详细教程!Kali Linux教程!
  • unity开发棋牌游戏
  • CppCon 2014 学习:Defensive Programming Done Right.
  • windows 缓冲区溢出实验关于VS的一些配置 (逆向与漏洞分析 (魏强) (Z-Library))
  • 【存储基础】数据存储基础知识
  • 【基于阿里云搭建数据仓库(离线)】DataWorks中删除节点
  • 每日八股文6.2
  • 激光雷达的强度像和距离像误差与噪声分析(2)2025.6.2
  • 软件测评师教程 第2章 软件测试基础 笔记
  • Linux 中 m、mm、mmm 函数和 make 的区别
  • 【C++/Linux】TinyWebServer前置知识之IP协议详解
  • UE特效Niagara性能分析
  • String和StringBuilder和StringBuffer
  • Java从入门到精通 - 常用API(一)
  • Java函数式编程(中)
  • Vortex GPGPU的github流程跑通与功能模块波形探索(四)
  • 6个月Python学习计划 Day 12 - 字符串处理 文件路径操作
  • RocketMQ 消息发送核心源码解析:DefaultMQProducerImpl.send () 方法深度剖析