NumPy学习4
今天学习NumPy相关数组操作
NumPy 中包含了一些处理数组的常用方法,大致可分为以下几类:
(1)数组变维操作
(2)数组转置操作
(3)修改数组维度操作
(4)连接与分割数组操作
numpy_test4.py :
import numpy as np '''
10, NumPy相关数组操作
NumPy 中包含了一些处理数组的常用方法,大致可分为以下几类: (1)数组变维操作
(2)数组转置操作
(3)修改数组维度操作
(4)连接与分割数组操作
''' '''
(1) 数组变维操作
数组变维操作
函数名称 函数介绍
reshape 在不改变数组元素的条件下,修改数组的形状。
flat 返回是一个迭代器,可以用 for 循环遍历其中的每一个元素。
flatten 以一维数组的形式返回一份数组的副本,对副本的操作不会影响到原数组。
ravel 返回一个连续的扁平数组(即展开的一维数组),与 flatten不同,它返回的是数组视图(修改视图会影响原数组)。 1) reshape数组变维
数组的形状指的是多维数组的行数和列数。Numpy 模块提供 reshape(i, j) 函数可以改变多维数组行数i和列数j,
从而达到数组变维的目的。因此数组变维即对数组形状的重塑。
2 × 3 --reshape函数数组变维-> 3 × 2
'''
print("----(1) 数组变维操作----")
print("----1) reshape数组变维----")
arr1 = np.array([[1, 3], [2, 4], [3, 6]]) # 3行2列
print("arr1:", arr1)
#变维 2行3列,并不是矩阵的转置方式变维,而是下面最近的数据往上移动变维.
arr2 = arr1.reshape(2, 3)
print("arr2:", arr2)
'''
arr1: [[1 3]
[2 4]
[3 6]]
arr2: [[1 3 2]
[4 3 6]]
''' '''
2) numpy.ndarray.flat
numpy.ndarray.flat 返回一个数组迭代器
'''
print("----2) numpy.ndarray.flat 数组迭代器----")
print("arr1.flat: ")
#使用flat属性:类似循环输出数组元素
for e in arr1.flat:
print (e,end=",")
print("\n")
'''
arr1.flat:
1,3,2,4,3,6,
''' '''
3) numpy.ndarray.flatten()
numpy.ndarray.flatten 返回一份数组副本,对副本修改不会影响原始数组,其语法格式如下: ndarray.flatten(order='C') 默认按行C风格展开的数组
C-order(行优先顺序)与 F-order(列优先顺序)
'''
print("----3) numpy.ndarray.flatten() 数组副本----")
arr3 = np.arange(9).reshape(3,3)
print("arr3", arr3)
#默认按行C风格展开的数组
arr4 = arr3.flatten()
print("arr4", arr4)
#以F风格顺序展开的数组
arr5 = arr3.flatten(order='F')
print("arr5", arr5)
'''
arr3 [ [0 1 2]
[3 4 5]
[6 7 8]]
arr4 [0 1 2 3 4 5 6 7 8]
arr5 [0 3 6 1 4 7 2 5 8]
''' '''
4) numpy.ravel()
numpy.ravel() 将多维数组中的元素以一维数组的形式展开,该方法返回数组的视图(view),如果修改,则会影响原始数组。 numpy.ravel(arr, order='C') 默认按行C风格展开的数组
C-order(行优先顺序)与 F-order(列优先顺序)
'''
print("----4) numpy.ravel() 数组的视图(view)----")
arr6 = np.arange(9).reshape(3, 3)
print("arr6: ", arr6)
print ('调用 ravel 函数后:')
arr7 = arr6.ravel()
print("arr7: ", arr7)
print ('F 风格顺序调用 ravel 函数之后:')
arr8 = arr6.ravel(order='F')
print("arr8: ", arr8)
'''
arr6: [ [0 1 2]
[3 4 5]
[6 7 8]]
调用 ravel 函数后:
arr7: [0 1 2 3 4 5 6 7 8]
F 风格顺序调用 ravel 函数之后:
arr8: [0 3 6 1 4 7 2 5 8]
''' '''
(2) 数组转置操作 函数名称 说明
transpose 将数组的维度值进行对换,比如二维数组维度(2,4)使用该方法后为(4,2)。
ndarray.T 与 transpose 方法相同。
rollaxis 沿着指定的轴向后滚动至规定的位置。
swapaxes 对数组的轴进行对换。
''' '''
1) numpy.transpose()
numpy.transpose() 用于对换多维数组的维度,比如二维数组使用此方法可以实现矩阵转置,语法格式如下: numpy.transpose(arr, axes)
参数说明如下:
arr:要操作的数组
axes:可选参数,元组或者整数列表,将会按照该参数进行转置。
'''
print("----(2) 数组转置操作----")
arr9 = np.arange(6).reshape(3,2)
print("arr9: ", arr9)
print("----1) numpy.transpose() 矩阵转置----")
arr10 = np.transpose(arr9)
print("arr10: ", arr10)
'''
arr9: [ [0 1]
[2 3]
[4 5]]
----1) numpy.transpose() 矩阵转置----
arr10: [[0 2 4]
[1 3 5]]
'''
'''
2) ndarray.T 的使用方法与其类似
'''
print("----2) ndarray.T 矩阵转置----")
arr11 = np.transpose(arr9)
print("arr11: ", arr11)
'''
----2) ndarray.T 矩阵转置----
arr11: [[0 2 4]
[1 3 5]]
''' '''
3) numpy.rollaxis()
该方法表示定位沿着指定的轴,向后滚动至一个特置,格式如下: numpy.rollaxis(arr, axis, start)
参数说明:
arr:要传入的数组;
axis:沿着哪条轴向后滚动,其它轴的相对位置不会改变;
start:默认以 0 轴开始,可以根据数组维度调整它的值。
'''
# 创建了三维的 ndarray
arr12 = np.arange(27).reshape(3, 3, 3)
print("arr12: ", arr12)
print("----3) numpy.rollaxis() 定位沿着指定的轴,向后滚动至一个特置----")
arr13 = np.rollaxis(arr12, 2)
print("arr13: ", arr13)
'''
arr12: [[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]] [[ 9 10 11]
[12 13 14]
[15 16 17]] [[18 19 20]
[21 22 23]
[24 25 26]]]
----3) numpy.rollaxis() 定位沿着指定的轴,向后滚动至一个特置----
arr13: [[[ 0 3 6]
[ 9 12 15]
[18 21 24]] [[ 1 4 7]
[10 13 16]
[19 22 25]] [[ 2 5 8]
[11 14 17]
[20 23 26]]]
''' '''
4) numpy.swapaxes()
该方法用于交换数组的两个轴,其语法格式如下:
numpy.swapaxes(arr, axis1, axis2)
'''
print("----4) numpy.swapaxes() 交换数组的两个轴----")
#对换0轴与2轴
arr14 = np.swapaxes(arr12, 2, 0)
print("arr14: ", arr14)
'''
----4) numpy.swapaxes() 交换数组的两个轴----
arr14: [[[ 0 9 18]
[ 3 12 21]
[ 6 15 24]] [[ 1 10 19]
[ 4 13 22]
[ 7 16 25]] [[ 2 11 20]
[ 5 14 23]
[ 8 17 26]]]
''' '''
(3) 修改数组维度操作
修改数组维度的操作,主要有以下方法: 数组维度修改
函数名称 描述说明
broadcast 生成一个模拟广播的对象。
broadcast_to 将数组广播为新的形状。
expand_dims 扩展数组的形状。
squeeze 从数组的形状中删除一维项。
'''
print("----(3) 修改数组维度操作----")
'''
1) numpy.broadcast()
该函数以两个数组作为输入参数,返回值是数组被广播后的对象
'''
print("----1) numpy.broadcast() 数组被广播----")
a1 = np.array([[1], [2], [3]])
b1 = np.array([4, 5, 6])
# 对b1广播a1
d1 = np.broadcast(a1, b1)
print("d1: ", d1)
#d1它拥有 iterator 属性
r1, c1 = d1.iters
print("next(r1), next(c1): ", next(r1), next(c1))
print("next(r1), next(c1): ", next(r1), next(c1))
# 使用broadcast将a1与b1相加
e1 = np.broadcast(a1, b1)
print("e1: ", e1)
f = np.empty(e1.shape)
print("f: ", f)
f.flat = [x+y for (x,y) in e1]
print("f.flat: ", f)
print("a1+b1: ", a1+b1)
'''
d1: <numpy.broadcast object at 0x000001EFFEEB58A0>
next(r1), next(c1): 1 4
next(r1), next(c1): 1 5
e1: <numpy.broadcast object at 0x000001EFFEEB7160>
f: [[0.00000000e+000 0.00000000e+000 0.00000000e+000]
[0.00000000e+000 0.00000000e+000 3.02368175e-321]
[0.00000000e+000 0.00000000e+000 5.97409933e-299]]
f.flat: [[5. 6. 7.]
[6. 7. 8.]
[7. 8. 9.]]
a1+b1: [[5 6 7]
[6 7 8]
[7 8 9]]
''' '''
2) numpy.broadcast_to()
该函数将数组广播到新形状中,它在原始数组的基础上返回一个只读视图。
如果新形状不符合 NumPy 的广播规则,则会抛出 ValueError 异常。函数的语法格式如下: numpy.broadcast_to(array, shape, subok)
'''
a1 = np.arange(4).reshape(1,4)
print("a1: ",a1)
print("----2) numpy.broadcast_to() 数组广播到新形状----")
a2 = np.broadcast_to(a1, (3, 4))
print("a2: ",a2)
'''
a1: [[0 1 2 3]]
调用 broadcast_to 函数之后:
a2: [[0 1 2 3]
[0 1 2 3]
[0 1 2 3]]
''' '''
3) numpy.expand_dims()
在指定位置插入新的轴,从而扩展数组的维度,语法格式如下: numpy.expand_dims(arr, axis)
参数说明:
arr:输入数组
axis:新轴插入的位置
'''
print("----3) numpy.expand_dims() 在指定位置插入新的轴,从而扩展数组的维度----")
x1 = np.array(([1, 2], [3, 4]))
print('数组 x1 :', x1)
# 在 0 轴处插入新的轴
y1 = np.expand_dims(x1, axis=0)
print('数组 y1 :', y1)
print('数组 x1 的形状:', x1.shape)
print('数组 y1 的形状:', y1.shape)
'''
数组 x1 : [[1 2]
[3 4]]
数组 y1 : [[[1 2]
[3 4]]]
数组 x1 的形状: (2, 2)
数组 y1 的形状: (1, 2, 2)
''' '''
4) numpy.squeeze()
删除数组中维度为 1 的项,例如,一个数组的 shape 是 (5,1),经此函数后,shape 变为 (5,) 。
其函数语法格式如下:
numpy.squeeze(arr, axis) 参数说明:
arr:输入数的组;
axis:取值为整数或整数元组,用于指定需要删除的维度所在轴,指定的维度值必须为 1 ,否则将会报错,
若为 None,则删除数组维度中所有为 1 的项。
'''
print("----4) numpy.squeeze() 删除数组中维度为 1 的项----")
a1 = np.arange(9).reshape(1, 3, 3)
print('a1 :', a1)
print('数组 a1 的形状:', a1.shape)
b1 = np.squeeze(a1)
print('b1 :', b1)
print('数组 b1 的形状:', b1.shape)
'''
a1 : [[[0 1 2]
[3 4 5]
[6 7 8]]]
数组 a1 的形状: (1, 3, 3)
b1 : [[0 1 2]
[3 4 5]
[6 7 8]]
数组 b1 的形状: (3, 3)
''' '''
(4) 连接与分割数组操作
连接与分割数组是数组的两种操作方式,如下所示: 连接与分割数组
类型 函数名称 描述说明
连接数组方法
concatenate 沿指定轴连接两个或者多个相同形状的数组
stack 沿着新的轴连接一系列数组
hstack 按水平顺序堆叠序列中数组(列方向)
vstack 按垂直方向堆叠序列中数组(行方向)
分割数组方法
split 将一个数组分割为多个子数组
hsplit 将一个数组水平分割为多个子数组(按列)
vsplit 将一个数组垂直分割为多个子数组(按行)
''' '''
1) 连接数组操作
numpy.concatenate() 沿指定轴连接相同形状的两个或多个数组,格式如下: numpy.concatenate((a1, a2, ...), axis)
参数说明:
a1, a2, ...:表示一系列相同类型的数组;
axis:沿着该参数指定的轴连接数组,默认为 0。 实例说明:创建两个 a 、b 数组,并沿指定轴将它们连接起来。注意两个数组的形状要保持一致。
'''
print("----(4) 连接与分割数组操作----")
print("----1) 连接数组操作----")
#创建数组a
a1 = np.array([[1, 2], [3, 4]])
print('a1: ', a1)
#创建数组b
b1 = np.array([[5, 6], [7, 8]])
print('b1: ', b1)
#沿轴 0 连接两个数组
print('np.concatenate((a1,b1)): ', np.concatenate((a1, b1)))
#沿轴 1 连接两个数组
print('np.concatenate((a,b),axis = 1): ', np.concatenate((a1, b1),axis=1))
#垂直堆叠
print('np.vstack((a1,b1)): ', np.vstack((a1,b1)))
'''
a1: [[1 2]
[3 4]]
b1: [[5 6]
[7 8]]
np.concatenate((a1,b1)): [[1 2]
[3 4]
[5 6]
[7 8]]
np.concatenate((a,b),axis = 1): [[1 2 5 6]
[3 4 7 8]]
np.vstack((a1,b1)): [[1 2]
[3 4]
[5 6]
[7 8]]
数组连接操作至少需要两个维度相同的数组,才允许对它们进行垂直或者水平方向上的操作。
''' '''
2) 分割数组操作
numpy.split() 沿指定的轴将数组分割为多个子数组,语法格式如下: numpy.split(ary, indices_or_sections, axis)
参数说明:
ary:被分割的数组
indices_or_sections:若是一个整数,代表用该整数平均切分,若是一个数组,则代表沿轴切分的位置(左开右闭);
axis:默认为0,表示横向切分;为1时表示纵向切分。
'''
print("----2) 分割数组操作----")
a1 = np.arange(8)
#原数组
print('a1: ', a1)
#将数组分为二个形状大小相等的子数组
b1 = np.split(a1, 2)
print('b1: ', b1)
#将数组在一维数组中标明要位置分割
b2 = np.split(a1, [3, 4])
print('b2: ', b2)
a2 = a1.reshape(2,4)
print('a2: ', a2)
b3 = np.hsplit(a2, 4)
print('b3: ', b3)
'''
a1: [0 1 2 3 4 5 6 7]
b1: [array([0, 1, 2, 3]), array([4, 5, 6, 7])]
b2: [array([0, 1, 2]), array([3]), array([4, 5, 6, 7])]
a2: [[0 1 2 3]
[4 5 6 7]]
b3: [array([[0],
[4]]), array([[1],
[5]]), array([[2],
[6]]), array([[3],
[7]])]
'''
NumPy学习4的更多相关文章
- NumPy学习笔记 三 股票价格
NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- NumPy学习笔记 一
NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- 数据分析之Pandas和Numpy学习笔记(持续更新)<1>
pandas and numpy notebook 最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...
- NumPy学习(索引和切片,合并,分割,copy与deep copy)
NumPy学习(索引和切片,合并,分割,copy与deep copy) 目录 索引和切片 合并 分割 copy与deep copy 索引和切片 通过索引和切片可以访问以及修改数组元素的值 一维数组 程 ...
- NumPy学习(让数据处理变简单)
NumPy学习(一) NumPy数组创建 NumPy数组属性 NumPy数学算术与算数运算 NumPy数组创建 NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型. 它描述相同 ...
- numpy 学习笔记
numpy 学习笔记 导入 numpy 包 import numpy as np 声明 ndarray 的几种方法 方法一,从list中创建 l = [[1,2,3], [4,5,6], [7,8,9 ...
- numpy 学习总结
numpy 学习总结 作者:csj更新时间:01.09 email:59888745@qq.com 说明:因内容较多,会不断更新 xxx学习总结: 回主目录:2017 年学习记录和总结 #生成数组/使 ...
- (转)Python数据分析之numpy学习
原文:https://www.cnblogs.com/nxld/p/6058572.html https://morvanzhou.github.io/tutorials/data-manipulat ...
- Numpy学习1
NumPy学习(1) 参考资料: http://www.cnblogs.com/zhanghaohong/p/4854858.html http://linusp.github.io/2016/02/ ...
随机推荐
- Qt开源作品9-扁平化样式flatui
一.前言 对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产生的质感色彩反 ...
- 欧拉OpenEuler安装MySQL8
1. 安装mysql tar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar mv mysql-8.0.21-linux-glibc2.12-x86_64 / ...
- yarn : 无法加载文件 C:\Users\duany\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本
在win10 下安装yarn后,在编辑器中检查yarn的安装的时候会出现: 解决方法 1:搜索powershell,以管理员方式运行powershell2:使用命令更改计算机的执行策略 执行: set ...
- TIBCO Jaspersoft Studio-6.12.2连接mysql时显示时区问题
TIBCO Jaspersoft Studio-6.12.2创建mysql型的Data Adapter, 在进行连接test时弹出显示时区问题,如下图所示: 解决办法: 在Data Adapter W ...
- 这些小 Bug,99% 的程序员都写过!
"程序怎么运行不了,不应该啊?" "程序怎么能运行了,不应该啊!" 这句话是不是让程序员朋友们的 DNA 动了呢?今天鱼皮分享一些新手程序员常犯的小 Bug,很 ...
- 意外之喜——黑夜 CrossFire!!!
在日常逛L站时,偶然发现了"友链"功能,机缘巧合下进入了specialhua的博客,又被吸引着点进了其中一篇博客,于是便通过specialhua的博客看到了黑夜的这篇文章,感觉就像 ...
- OpenMMLab AI实战营 第二课笔记 计算机视觉之图像分类算法基础
OpenMMLab AI实战营 第二课笔记 目录 OpenMMLab AI实战营 第二课笔记 图像分类与基础视觉基础 1.图像分类问题 1.1 问题的数学表示 1.2 视觉任务的难点 1.2.1 超越 ...
- uwp 多语言和本地化
1. 在项目根目录创建Strings文件夹,再Strings文件夹创建需要的语言名子目录,再添加资源文件Resources.resw,目录构如: Strings\en-US\Resources.res ...
- 正确停止Oracle expdp/impdp作业操作方法
1.使用命令查看在运行的作业名称,找到STATE是EXECUTING的作业名称. select job_name,state from dba_datapump_jobs; 2.再CMD命令窗口,键入 ...
- .NET中优雅使用Patch: JsonPatch
引言 在现代 Web API 开发中,我们经常需要对资源进行部分更新(Partial Update).传统的 PUT 请求会要求发送整个对象,而 PATCH 请求可以仅发送需要更新的字段.ASP.NE ...