Python之numpy数组学习(二)

前言

前面我们学习了numpy库的简单应用,今天来学习下比较重要的如何处理数组。

处理数组形状

下面可将多维数组转换成一维数组时的情形。

利用以下函数处理数组的形状:

  • 拆解:ravel()函数可将多维数组变成一维数组。
  • 拉直(Flatten):flatten()函数与ravel()相同,但是,flatten()返回的是真实的数组,需要分配新的内存空间;而ravel()函数返回的只是数组的视图。
  • 用元组指定数组形状:除reshape()函数外,还可以用元组来定义数组的形状。
  • 转置:在线性代数中,矩阵的转置操作非常常见,转置是一种数据变换方法,对于二维表而言,转置就意味着行变成列,同时列变成行。
  • 调整大小:函数resize()的作用类似于reshape(),但是会改变所作用的数组。

堆叠数组

从深度看,数组既可以横向叠放,也可以竖向叠放。因此,可以使用vstack()、dstack()、hstack()、column_stack()、row_stack()、和concatenate()等函数。

首先我们要建立一些数组,然后整体说一下各种叠加方式,最后放上示例代码:

  • 水平叠加:先介绍水平叠加方式,即用元组确定ndarrays()数组的形状,然后交由hstack()函数来码放这些数组。
  • 垂直叠加:使用垂直叠加方法,先要构建一个元组,然后将元组交给vstack()函数来码放数组。
  • 深度叠加:还有一种深度叠加方法,这要用到dstack()函数和一个元组。这种方法是沿着第三个坐标轴(纵向)的方法来叠加一摞数组。举例来说:可以在一个图像数据的二维数组上叠加另一幅图像的数据。
  • 列式堆叠:column_stack()函数以列方式对一维数组进行堆叠。
  • 行式堆叠:同时,numpy也有以行方式对数组进行堆叠的函数,这个用于一维数组的函数名为row_stack(),它将数组作为行码放到二维数组中。

整体代码如下:

#-*- coding:utf-8 -*-
#stacking.py
import numpy as np

#创建数组
a = np.arange(9).reshape(3,3)

print(a)
#Out: 
#array([[0, 1, 2],
#       [3, 4, 5],
#       [6, 7, 8]])

b = 2 * a

print (b)
#Out: 
#array([[ 0,  2,  4],
#       [ 6,  8, 10],
#       [12, 14, 16]])

#水平叠加
print (np.hstack((a, b)))
#Out: 
#array([[ 0,  1,  2,  0,  2,  4],
#       [ 3,  4,  5,  6,  8, 10],
#       [ 6,  7,  8, 12, 14, 16]])

print (np.concatenate((a, b), axis=1))
#Out: 
#array([[ 0,  1,  2,  0,  2,  4],
#       [ 3,  4,  5,  6,  8, 10],
#       [ 6,  7,  8, 12, 14, 16]])
#垂直叠加
print (np.vstack((a, b)))
#Out: 
#array([[ 0,  1,  2],
#       [ 3,  4,  5],
#       [ 6,  7,  8],
#       [ 0,  2,  4],
#       [ 6,  8, 10],
#       [12, 14, 16]])

print (np.concatenate((a, b), axis=0))
#Out: 
#array([[ 0,  1,  2],
#       [ 3,  4,  5],
#       [ 6,  7,  8],
#       [ 0,  2,  4],
#       [ 6,  8, 10],
#       [12, 14, 16]])
#深度叠加
print (np.dstack((a, b)))
#Out: 
#array([[[ 0,  0],
#        [ 1,  2],
#        [ 2,  4]],
#
#       [[ 3,  6],
#        [ 4,  8],
#        [ 5, 10]],
#
#       [[ 6, 12],
#        [ 7, 14],
#        [ 8, 16]]])

oned = np.arange(2)

print (oned)
#Out: array([0, 1])

twice_oned = 2 * oned

print (twice_oned)
#Out: array([0, 2])

print (np.column_stack((oned, twice_oned))) 
#Out: 
#array([[0, 0],
#       [1, 2]])

print (np.column_stack((a, b)))
#Out: 
#array([[ 0,  1,  2,  0,  2,  4],
#       [ 3,  4,  5,  6,  8, 10],
#       [ 6,  7,  8, 12, 14, 16]])
#数组对比
print (np.column_stack((a, b)) == np.hstack((a, b)))
#Out: 
#array([[ True,  True,  True,  True,  True,  True],
#       [ True,  True,  True,  True,  True,  True],
#       [ True,  True,  True,  True,  True,  True]], dtype=bool)
#列式堆叠
print (np.row_stack((oned, twice_oned)))
#Out: 
#array([[0, 1],
#       [0, 2]])
 
print (np.row_stack((a, b)))
#Out: 
#array([[ 0,  1,  2],
#       [ 3,  4,  5],
#       [ 6,  7,  8],
#       [ 0,  2,  4],
#       [ 6,  8, 10],
#       [12, 14, 16]])

print (np.row_stack((a,b)) == np.vstack((a, b)))
#Out: 
#array([[ True,  True,  True],
#       [ True,  True,  True],
#       [ True,  True,  True],
#       [ True,  True,  True],
#       [ True,  True,  True],
#       [ True,  True,  True]], dtype=bool)

小结

今天学习一下Python中numpy的堆叠数组。希望通过上面的操作能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。

原文发布于微信公众号 - CDA数据分析师(cdacdacda)

原文发表时间:2017-05-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小鹏的专栏

tf API 研读2:math

TF API数学计算 tf...... :math (1)刚开始先给一个运行实例。         tf是基于图(Graph)的计算系统。而图的节点则是由操作(...

7775
来自专栏机器之心

资源 | 从数组到矩阵的迹,NumPy常见使用大总结

4229
来自专栏mathor

科学计算库Numpy

 genfromtxt函数里穿了三个参数,分别是 要打开的文档名称,分隔符,以什么类型存储  打印结果:

1184
来自专栏Petrichor的专栏

python: all & any 函数

1302
来自专栏窗户

有限域(2)——理想和商环

  我们上一节介绍了环(ring)、域(field)的概念,并给了一些环、域的实例。比如我们知道整数环、方阵环、有理数域、实数域等。我们知道,域是环的一个种。最...

882
来自专栏深度学习之tensorflow实战篇

python 中numpy基本方法总结可以类推tensorflow

一、数组方法 创建数组:arange()创建一维数组;array()创建一维或多维数组,其参数是类似于数组的对象,如列表等 反过来转换则可以使用numpy.n...

6095
来自专栏深度学习计算机视觉

打印字符图形(蓝桥杯基础题 Java版)

问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这...

4186
来自专栏Petrichor的专栏

tensorflow math api 汇总表

  Defined in tensorflow/python/ops/math_ops.py

1582
来自专栏向治洪

数据结构之2-3-4树

2-3-4树是一种阶为4的B树。它是一种自平衡的数据结构,可以在O(lgn)的时间内查找、插入和删除,这里的n是树中元素的数目。2-3-4树和红黑树是等价的,也...

1889
来自专栏ACM算法日常

将树围起来(几何凸包)- HDU 1392

在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。如下图所示。计算凸包也就是求得外围(蓝线上)的那些点。

982

扫码关注云+社区

领取腾讯云代金券