numpy教程05---ndarray的高级操作
欢迎关注公众号【Python开发实战】, 获取更多内容!

工具-numpy
numpy是使用Python进行数据科学的基础库。numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变换和随机数函数。
ndarray的迭代
导入numpy
import numpy as np
在ndarray的迭代与常规Python数组的迭代非常相似。但是需要住的是,多维ndarray的迭代是相对于第一个轴完成的。
c = np.arange(24).reshape(2, 3, 4)
c
输出:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
for m in c:
print('item:')
print(m)
输出:
item:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
item:
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]
for i in range(len(c)): # 这里,len(c)等于c.shape[0]
print('item')
print(c[i])
输出:
item
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
item
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]
如果想要迭代ndarray中的所有元素,需要对ndarray的flat属性进行迭代。
for i in c.flat:
print('item: ', i)
输出:
item: 0
item: 1
item: 2
item: 3
item: 4
item: 5
item: 6
item: 7
item: 8
item: 9
item: 10
item: 11
item: 12
item: 13
item: 14
item: 15
item: 16
item: 17
item: 18
item: 19
item: 20
item: 21
item: 22
item: 23
堆叠ndarray
将不同的ndarray堆叠在一起通常很有用。numpy提供了几个函数来实现堆叠。介绍堆叠函数之前,先创建几个ndarray。
q1 = np.full((3, 4), 1.0)
q1
输出:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
q2 = np.full((4, 4), 2.0)
q2
输出:
array([[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]])
q3 = np.full((3, 4), 3.0)
q3
输出:
array([[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]])
vstack
vstack可以垂直堆叠ndarray,但是要满足需要堆叠的ndarray,除了垂直轴以外,即在水平轴上要具有相同的形状。
q4 = np.vstack((q1, q2, q3))
q4
输出:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]])
q4.shape
输出:
(10, 4)
hstack
hstack可以水平堆叠ndarray。但是要满足需要堆叠的ndarray在垂直轴上具有相同的形状。
q5 = np.hstack((q1, q3))
q5
输出:
array([[1., 1., 1., 1., 3., 3., 3., 3.],
[1., 1., 1., 1., 3., 3., 3., 3.],
[1., 1., 1., 1., 3., 3., 3., 3.]])
q5.shape
输出:
(3, 8)
try:
q6 = np.hstack((q1, q2, q3))
except ValueError as e:
print(e)
输出:
all the input array dimensions except for the concatenation axis must match exactly
concatenate
concatenate可以沿给定的现有轴进行堆叠, 故vstack相当于调用axis=0的concatenate, hstack相当于调用axis=1的concatenate。
q7 = np.concatenate((q1, q2, q3), axis=0) # 相当于vstack
q7
输出:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]])
q7.shape
输出:
(10, 4)
q8 = np.concatenate((q1, q3), axis=1) # 相当于hstack
q8
输出:
array([[1., 1., 1., 1., 3., 3., 3., 3.],
[1., 1., 1., 1., 3., 3., 3., 3.],
[1., 1., 1., 1., 3., 3., 3., 3.]])
q8.shape
输出:
(3, 8)
stack
stack是沿着新轴进行堆叠,因此需要堆叠的ndarray必需具有相同的shape.
q9 = np.stack((q1, q3))
q9
输出:
array([[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]]])
q9.shape
输出:
(2, 3, 4)
try:
q10 = np.stack((q1, q2))
except ValueError as e:
print(e)
输出:
all input arrays must have the same shape
拆分ndarray
拆分ndarray与堆叠相反。
r = np.arange(24).reshape(6, 4)
r
输出:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
vsplit
vsplit可以垂直拆分ndarray, 下面的例子是将r垂直分成三等份。
r1, r2, r3 = np.vsplit(r, 3)
r1
输出:
array([[0, 1, 2, 3],
[4, 5, 6, 7]])
r2
输出:
array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])
r3
输出:
array([[16, 17, 18, 19],
[20, 21, 22, 23]])
hsplit
hsplit可以水平拆分ndarray。
r4, r5 = np.hsplit(r, 2)
r4
输出:
array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13],
[16, 17],
[20, 21]])
r5
输出:
array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15],
[18, 19],
[22, 23]])
split
split可以沿给定的现有轴进行拆分,调用axis=0的split相当于调用vsplit,调用axis=1的split相当于调用hsplit。
r6, r7 = np.split(r, 2, axis=1)
r6
输出:
array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13],
[16, 17],
[20, 21]])
转置ndarray
transpose函数是在ndarray的数据上创建一个新的视图,并按照给定顺序对轴排列。
t = np.arange(24).reshape(4, 2, 3)
t
输出:
array([[[ 0, 1, 2],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 9, 10, 11]],
[[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23]]])
现在创建一个ndarray,将轴0、1、2(深度、高度、宽度)重新排列为1、2、0(高度、宽度、深度)。
t1 = t.transpose((1, 2, 0))
t1
输出:
array([[[ 0, 6, 12, 18],
[ 1, 7, 13, 19],
[ 2, 8, 14, 20]],
[[ 3, 9, 15, 21],
[ 4, 10, 16, 22],
[ 5, 11, 17, 23]]])
t1.shape
输出:
(2, 3, 4)
默认情况下,transpose会翻转轴的顺序。
t2 = t.transpose() # 相当于t.transpose((2, 1, 0))
t2
输出:
array([[[ 0, 6, 12, 18],
[ 3, 9, 15, 21]],
[[ 1, 7, 13, 19],
[ 4, 10, 16, 22]],
[[ 2, 8, 14, 20],
[ 5, 11, 17, 23]]])
t2.shape
输出:
(3, 2, 4)
numpy提供了一个方便的swapaxes来交换两个轴, 例如,创建一个深度和高度交换的ndarray。
t3 = t.swapaxes(0, 1)
t3
输出:
array([[[ 0, 1, 2],
[ 6, 7, 8],
[12, 13, 14],
[18, 19, 20]],
[[ 3, 4, 5],
[ 9, 10, 11],
[15, 16, 17],
[21, 22, 23]]])
t3.shape
输出:
(2, 4, 3)
numpy教程05---ndarray的高级操作的更多相关文章
- 数据分析05 /pandas的高级操作
数据分析05 /pandas的高级操作 目录 数据分析05 /pandas的高级操作 1. 替换操作 2. 映射操作 3. 运算工具 4. 映射索引 / 更改之前索引 5. 排序实现的随机抽样/打乱表 ...
- W3School Redis教程(安装/基本操作/高级操作/命令/官方文档/官方集群教程)
说明:Redis有自身的客户端连接软件,也可以使用Telnet进行连接操作. 来自W3School的Redis教程,基本上涵盖了从安装到状态监控的教程. W3School:https://www.gi ...
- W3School Memcached教程(安装/基本操作/高级操作/命令)
来自W3School的Memcached教程,基本上涵盖了从安装到状态监控的教程. 不过最全的应该是官方提供在GitHub上的Wiki教程,一切的标准都来自官方,参考:https://github.c ...
- Numpy ndarray 的高级索引存在 "bug" ?
Numpy ndarray 高级索引 "bug" ? 话说一天,搞事情,代码如下 import numpy as np tmp = [1, 2, 3, 4] * 2 a, b = ...
- MDN 文档高级操作进阶教程
MDN 文档高级操作进阶教程 MDN 文档, 如何优雅的使用 MDN 文档上的富文本编辑器 pre & 语法高亮器 code & note box source code 上传附件 i ...
- numpy教程
[转]CS231n课程笔记翻译:Python Numpy教程 原文链接:https://zhuanlan.zhihu.com/p/20878530 译者注:本文智能单元首发,翻译自斯坦福CS231n课 ...
- 转:Numpy教程
因为用到theano写函数的时候饱受数据结构困扰 于是上网找了一篇numpy教程(theano的数据类型是基于numpy的) 原文排版更好,阅读体验更佳: http://phddreamer.blog ...
- Python 机器学习库 NumPy 教程
0 Numpy简单介绍 Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy ...
- pandas高级操作
pandas高级操作 import numpy as np import pandas as pd from pandas import DataFrame,Series 替换操作 替换操作可以同步作 ...
- 【MongoDB详细使用教程】四、python操作MongoDB
目录 1.安装pymongo 2.连接数据库 3.操作数据库 3.1.查 3.2.增 3.3.改 3.4.删 使用第三方库pymongo来实现python对MongoDB的操作 pymongo官方文档 ...
随机推荐
- windows2008R2重建索引
windows索引服务 索引服务是一项系统服务(Indexing Service),使用文档筛选器读取整个文档,并提取文档和属性传递给索引程序,这个过程称为"索引".索引服务可以从 ...
- SP20173题解
膜拜 rqy. 题意: 求: \[\sum_{i=1}^n \sigma_0(i^2) \] 首先我们知道 \(\sigma_0((p^k)^2)=2 \times k + 1=k+(k+1)=\si ...
- petite-vue源码剖析-逐行解读@vue/reactivity之reactive
在petite-vue中我们通过reactive构建上下文对象,并将根据状态渲染UI的逻辑作为入参传递给effect,然后神奇的事情发生了,当状态发生变化时将自动触发UI重新渲染.那么到底这是怎么做到 ...
- Arcmap软件报错:This application cannot run under a virtual machine arcmapr, 但是你并没有使用虚拟机
在任务栏搜索"启用或关闭 windows 功能",取消 "适用于 Linux 的 Windows 子系统" (有可能还需要 取消 "虚拟机平台&quo ...
- Flask 之 蓝图
蓝图,听起来就是一个很宏伟的东西 在Flask中的蓝图 blueprint 也是非常宏伟的 它的作用就是将 功能 与 主服务 分开怎么理解呢? 比如说,你有一个客户管理系统,最开始的时候,只有一个查看 ...
- FrameScan CMS漏洞扫描
工具简介 GithubL:https://github.com/qianxiao996/FrameScan FrameScan是一款python3编写的简易的cms漏洞检测框架,支持多种检测方式,支持 ...
- JDK API文档_1.6.0 中文版
链接:https://pan.baidu.com/s/1b0inUgYvEfjeusa3z_2p-g 密码:f8jk
- [八省联考2018]制胡窜 (SAM+大讨论)
正着做着实不太好做,正难则反,考虑反着做. 把i,j看成在切割字符串,我们统计有多少对(i,j)会切割所有与\(s_{l,r}\)相同的串.对于在后缀自动机上表示\(s_{l,r}\)的节点x,x的p ...
- Water 2.5.6 发布,一站式服务治理平台
Water(水孕育万物...) Water 为项目开发.服务治理,提供一站式解决方案(可以理解为微服务架构支持套件).基于 Solon 框架开发,并支持完整的 Solon Cloud 规范:已在生产环 ...
- 构造器(constructor)是否可被重写(override)?
构造器不能被继承,因此不能被重写,但可以被重载.