文章目录

  • 1. 更改数组的形状
  • 2. 将不同数组堆叠在一起
  • 3. 将一个数组分成几个较小的数组

1. 更改数组的形状

>>> import numpy as np
>>> a = np.floor(10*np.random.random((3,4)))
>>> a
array([[2., 2., 5., 6.],[2., 7., 4., 2.],[9., 3., 5., 8.]])
>>> a.shape
(3, 4)

数组的形状可通过各种命令更改。请注意,以下三个命令都返回修改后新的数组,原始数组不变

ravel()、reshape(m,n)、T
>>> a.ravel()       # ravel拆开的意思,展平数组
array([2., 2., 5., 6., 2., 7., 4., 2., 9., 3., 5., 8.])
>>> a.reshape(6,2)     #返回新的修改行数列数后的数组
array([[2., 2.],[5., 6.],[2., 7.],[4., 2.],[9., 3.],[5., 8.]])
>>> a.T                #行列互换,转置
array([[2., 2., 9.],[2., 7., 3.],[5., 4., 5.],[6., 2., 8.]])
>>> a.T.shape
(4, 3)
>>> a.shape
(3, 4)

下面这段话不明白:
由ravel()产生的数组中元素的顺序通常是“C风格”,也就是说,最右边的索引“改变最快”,所以[0,0]之后的元素是[0,1] 。如果数组被重新塑造成其他形状,数组又被视为“C-style”。NumPy通常创建按此顺序存储的数组,因此ravel()通常不需要复制其参数,但如果数组是通过切片另一个数组或使用不寻常选项创建的,则可能需要复制它。函数ravel()和reshape()也可以通过使用可选参数来指示使用FORTRAN风格的数组,其中最左侧的索引更改速度最快。

  • reshape(m,n) 函数返回具有修改形状的参数,而 ndarray.resize((m,n)) 方法修改原始数组
>>> a
array([[2., 2., 5., 6.],[2., 7., 4., 2.],[9., 3., 5., 8.]])>>> a.resize((2,6))
>>> a
array([[2., 2., 5., 6., 2., 7.],[4., 2., 9., 3., 5., 8.]])
  • 如果在reshape(m,n)操作中将维度指定为-1,则会自动计算该维度
>>> a.reshape(3,-1)     #不想算的维度设置成-1,偷懒
array([[2., 2., 5., 6.],[2., 7., 4., 2.],[9., 3., 5., 8.]])
>>> a.reshape(-1,3)
array([[2., 2., 5.],[6., 2., 7.],[4., 2., 9.],[3., 5., 8.]])

2. 将不同数组堆叠在一起

  • 几个数组可以沿不同的轴堆叠在一起
>>> a = np.floor(10*np.random.random((2,2)))
>>> a
array([[5., 7.],[6., 0.]])>>> b = np.floor(10*np.random.random((2,2)))
>>> b
array([[1., 5.],[1., 5.]])>>> np.vstack((a,b)) # v 垂向叠加
array([[5., 7.],[6., 0.],[1., 5.],[1., 5.]])>>> np.hstack((b,a))       # h 水平叠加
array([[1., 5., 5., 7.],[1., 5., 6., 0.]])
  • 函数 column_stack 将1D数组作为叠加到2D数组中。它相当于仅用于二维数组的 hstack
>>> from numpy import newaxis
>>> np.column_stack((a,b))
array([[5., 7., 1., 5.],[6., 0., 1., 5.]])>>> a = np.array([4,2])
>>> b = np.array([3,9])>>> np.column_stack((a,b))
array([[4, 3],      # a、b 作为 列 向量[2, 9]])>>> np.hstack((a,b))
array([4, 2, 3, 9])>>> a[:,newaxis]        # 加入新的轴
array([[4],[2]])>>> np.column_stack((a[:,newaxis],b[:,newaxis]))
array([[4, 3],[2, 9]])
>>> np.hstack((a[:,newaxis],b[:,newaxis]))     #两者结果一样
array([[4, 3],[2, 9]])
  • 函数 row_stack 相当于 vstack。一般来说,对于具有两个以上维度的数组,hstack 沿第二轴堆叠,vstack 沿第一轴堆叠,concatenate 允许一个可选参数,给出串接应该发生的轴。

在复杂情况下,r_c_ 可用于通过沿一个轴叠加数字来创建数组。它们允许使用范围字面量(“:”)

>>> np.r_[1:5,8,9]
array([1, 2, 3, 4, 8, 9])>>> np.c_[1:3,[8,9],                                      [10,11]]
array([[ 1,  8, 10],[ 2,  9, 11]])

3. 将一个数组分成几个较小的数组

  • 使用 hsplit ,可沿水平轴拆分,通过指定要返回的均匀划分的数组数量,或指定要在其后进行划分的列
>>> a = np.floor(10*np.random.random((2,12)))
>>> a
array([[8., 9., 8., 8., 9., 9., 3., 6., 2., 3., 3., 1.],[2., 5., 8., 5., 9., 2., 1., 3., 6., 1., 6., 8.]])
>>> np.hsplit(a,3)     # 将 a 分成3份
[array([[8., 9., 8., 8.],[2., 5., 8., 5.]]), array([[9., 9., 3., 6.],[9., 2., 1., 3.]]), array([[2., 3., 3., 1.],[6., 1., 6., 8.]])]
>>> np.hsplit(a,(3,4))
[array([[8., 9., 8.],[2., 5., 8.]]), array([[8.],[5.]]), array([[9., 9., 3., 6., 2., 3., 3., 1.],[9., 2., 1., 3., 6., 1., 6., 8.]])]
>>> np.hsplit(a,(3,5))     # 把3,4列划出来
[array([[8., 9., 8.],[2., 5., 8.]]), array([[8., 9.],[5., 9.]]), array([[9., 3., 6., 2., 3., 3., 1.],[2., 1., 3., 6., 1., 6., 8.]])]

  • vsplit 沿纵轴分割,并且 array_split 允许指定沿哪个轴分割。
>>> a
array([[8., 9., 8., 8., 9., 9.],[3., 6., 2., 3., 3., 1.],[2., 5., 8., 5., 9., 2.],[1., 3., 6., 1., 6., 8.]])
>>> np.vsplit(a,(2,4))     # 把2,3行划出来
[array([[8., 9., 8., 8., 9., 9.],[3., 6., 2., 3., 3., 1.]]), array([[2., 5., 8., 5., 9., 2.],[1., 3., 6., 1., 6., 8.]]), array([], shape=(0, 6), dtype=float64)]
>>> np.vsplit(a,(2,3))     # 把2行划出来
[array([[8., 9., 8., 8., 9., 9.],[3., 6., 2., 3., 3., 1.]]), array([[2., 5., 8., 5., 9., 2.]]), array([[1., 3., 6., 1., 6., 8.]])]

NumPy快速入门--形状操作相关推荐

  1. numpy安装_Python进阶之NumPy快速入门(一)

    前言 NumPy是Python的一个扩展库,负责数组和矩阵运行.相较于传统Python,NumPy运行效率高,速度快,是利用Python处理数据必不可少的工具. 这个NumPy快速入门系列分为四篇,包 ...

  2. NumPy 快速入门系列:应用统计学基础概念、相关统计指标与NumPy的实现

    NumPy 快速入门系列:应用统计学基础概念.相关统计指标与NumPy的实现 前言: 统计学导论: 统计学定义: 统计学分类: 统计学基本概念: 统计过程: 统计指标与NumPy: 用 Python ...

  3. 《Python数据分析基础教程:NumPy学习指南(第2版)》笔记1:第一章 NumPy快速入门

    NumPy快速入门 1.1 Python NumPy是基于Python的,因此在安装NumPy之前,需要先安装Python.某些操作系统已经默认安装有Python环境,但仍需检查Python的版本是否 ...

  4. Linux快速入门(操作基础)

    Linux快速入门(操作基础) 一.Linux操作系统 Shell简介: shell的原意是外壳,用来形容物体外部的架构.Linux系统的shell作为操作系统的外壳,为用户提供了使用操作系统的接口. ...

  5. Python3数据分析——NumPy快速入门教程(官网教程翻译)

    目录 一.基础篇 1.创建数组 2.打印数组 3.基本运算 4.通用函数(ufunc) 5.索引,切片和迭代 二.形状操作 1.更改数组的形状 2.组合(stack)不同的数组 3.将一个数组分割(s ...

  6. python科学计算教学_Python最好用的科学计算库:NumPy快速入门教程(二)

    形状操作 首先导入numpy库 >>> import numpy as np 改变数组的形状 数组的形状由每个维度的元素的数量决定. >>> a = np.floo ...

  7. openEuler快速入门-openEuler操作系统介绍

    openEuler快速入门 第一章 openEuler操作系统介绍 文章目录 openEuler快速入门 前言 一.openEuler操作系统介绍 二.openEuler操作系统使用 三.openEu ...

  8. NumPy快速入门-- Less 基础/线性代数

    文章目录 1. 广播(Broadcasting)规则 2. 使用索引数组索引 3. 使用布尔值作为数组索引 4. ix_()函数 5. 线性代数 简单数组操作 6. 技巧和提示 6.1 "自 ...

  9. NumPy快速入门--基础知识

    文章目录 1. 一个典型例子 2. 数组的创建 3. 打印数组 4. 基本操作 5. 通用函数 6. 索引.切片.迭代 NumPy的数组类被称为ndarray.别名为 array. ndarray.n ...

最新文章

  1. struts2 iterator list中对象的list 双层迭代
  2. 分享一些有趣的面试智力题
  3. D盘提示RAW文件如何找回
  4. 前端神器avalonJS入门(二)
  5. 派衰计算机,知乎:格局派和旺衰派的区别,两者各有什么优缺点?
  6. C语言指针变量与一维数组
  7. Linux基础之命令练习Day2-useradd(mod,del),groupadd(mod,del),chmod,chown,
  8. C++ vector是什么?应该如何理解
  9. bzoj 1694 1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草(DP)
  10. 新兴的人工智能服务器,5个新兴人工智能物联网应用
  11. 修改上传文件大小限制(LNMP/wamp环境)
  12. js constructor 和 instanceof
  13. 《高质量程序设计指南:C++/C语言》 林锐
  14. 数据库推荐,qPCR引物设计与评价
  15. 计算机网络 IP地址分为那两部分
  16. 弘辽科技:拼多多运营做好竞品分析。
  17. exsi rh2288hv5 驱动_华为2288H V5阵列卡驱动下载|
  18. python图灵机器人接口_apikey创建接入图灵机器人
  19. linux下搭建ecshop教程,linux下安装ecshop,
  20. 数字图像处理 笔记--2

热门文章

  1. php注入教程,php注入点构造代码实例详解
  2. java语言 编译原理_【Java学习】深入分析Java的编译原理
  3. 细粒度权限控制 linux,利用docker插件实现细粒度权限控制
  4. Hbase Rowkey设计原则
  5. Flow monitoring in Software-Defined Networks
  6. 程序员经常说的「设计模式」到底是什么?
  7. PYQT4 Python GUI 编写与 打包.exe程序
  8. 小程序开发过程注意事项
  9. 代码实现:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。...
  10. node.js初入手