社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python之numpy数组学习(二)

CDA数据分析师 • 8 年前 • 1402 次点击  

作者  Airy
本文转自AiryData,转载需授权


前言

前面我们学习了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的堆叠数组。希望通过上面的操作能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。


推荐阅读


【书单】18本数据科学家必读的R语言和Python相关书籍

如何像数据科学家一样思考

北京VS上海,哪座城市人口更多?

我是如何一不小心阻止了勒索病毒的全球蔓延

用python抓取摩拜单车API数据并做可视化分析(源码)

2017年大数据和数据科学的六大发展趋势

你每天要花多少时间在手机上?

初级数据科学家求职时的 3 大必备能力

不可错过的优质深度学习课程

职场 | 数据库面试常问的一些基本概念

听说你最擅长“拖”,你“拖”得过Excel吗?

数据科学优质课程推荐#2:统计入门课程篇

歌手外科和猴姑,大数据告诉你白百何出轨后谁最惨

想学习数据科学?我们整理了一份优质编程入门课程清单

数据科学家在美国仍然是最热门工作的3大原因

一个优秀数据分析师的准则

Python 实现一个火车票查询的工具

干货 | 携程实时用户行为系统实践

数据分析证明最靠谱的电影评分网站不是 IMDB, 也不是烂番茄,而是...

那些年,写 Python 犯过的错误




原文
今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/weixin/U9rvSElgFs
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2037
 
1402 次点击