用Python对numpy数组进行变形(python np数组)
off999 2024-11-06 11:22 18 浏览 0 评论
本教程和备忘单提供可视化帮助您了解numpy如何重塑多维数组。
numpy reshape()方法如何重整数组? 您是否感到困惑或难以理解其工作原理? 本教程将引导您逐步重塑numpy。 如果您需要上述备忘单的pdf副本,则可以在此处(https://github.com/hauselin/rtutorialsite/blob/master/_posts/2019-12-20-numpy-reshape/reshape.pdf)下载。
创建一个Python numpy数组
使用np.arange()生成一个numpy数组,其中包含从1到12的数字序列。请参见此处的文档。
import numpy as np
a1 = np.arange(1, 13) # numbers 1 to 12
print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
使用reshape()方法重塑
使用reshape()方法将a1数组整形为3 x 4维数组。 让我们使用3_4来表示它的尺寸:3是第0个尺寸(轴),4是第1个尺寸(轴)(请注意,Python索引从0开始)。 请参阅此处的文档。
a1_2d = a1.reshape(3, 4) # 3_4
print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
如果希望numpy自动确定特定尺寸应为多少尺寸/长度,请将该尺寸指定为-1。
a1.reshape(3, 4)
a1.reshape(-1, 4) # same as above: a1.reshape(3, 4)
a1.reshape(3, 4)
a1.reshape(3, -1) # same as above: a1.reshape(3, 4)
a1.reshape(2, 6)
a1.reshape(2, -1) # same as above: a1.reshape(2, 6)
沿不同尺寸重塑
默认情况下,reshape()沿第0维(行)对数组进行整形。 可以通过命令参数更改此行为(默认值为" C")。 请参阅文档以获取更多信息。
a1.reshape(3, 4) # reshapes or ‘fills in’ row by row
a1.reshape(3, 4, order='C') # same results as above
通过将顺序更改为" F",我们可以沿第一维(列)重塑形状。 对于熟悉MATLAB的人,MATLAB使用此顺序。
a1.reshape(3, 4, order='F') # reshapes column by column
> [[ 1 4 7 10]
[ 2 5 8 11]
[ 3 6 9 12]]
测试:阵列a1的尺寸/形状是什么?
a1是一维数组-仅具有1个维度,即使您可能认为其维度应为1_12(1行12列)。 要转换为1_12数组,请使用reshape()。
print(a1) # what's the shape?
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
print(a1.shape)
> (12,)
a1_1_by_12 = a1.reshape(1, -1) # reshape to 1_12
print(a1_1_by_12) # note the double square brackets!
> [[ 1 2 3 4 5 6 7 8 9 10 11 12]]
print(a1_1_by_12.shape) # 1_12 array
> (1, 12)
使用ravel()展平/拖曳到一维数组
使用ravel()方法可以将多维数组转换为一维数组(请参见此处的文档)。 我们的2D数组(3_4)将被展平或拉平,使其成为具有12个元素的1D数组。
如果您未指定任何参数,则ravel()将沿行(第0维/轴)展平/散列我们的2D数组。 即,第0行[1、2、3、4] +第1行[5、6、7、8] +第2行[9、10、11、12]。
如果要沿列(第1维)展平/滚动,请使用order参数。
print(a1_2d) # 3_4
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
print(a1_2d.ravel()) # ravel by row (default order='C')
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
print(a1_2d.ravel(order='F')) # ravel by column
> [ 1 5 9 2 6 10 3 7 11 4 8 12]
使用np.stack()和np.hstack()连接/堆栈数组
创建两个一维数组
a1 = np.arange(1, 13)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
a2 = np.arange(13, 25)
print(a2)
> [13 14 15 16 17 18 19 20 21 22 23 24]
使用np.stack()连接/堆栈数组。 默认情况下,np.stack()沿第0维(行)(参数轴= 0)堆叠数组。 有关更多信息,请参阅文档。
stack0 = np.stack((a1, a1, a2, a2)) # default stack along 0th axis
print(stack0.shape)
> (4, 12)
print(stack0)
> [[ 1 2 3 4 5 6 7 8 9 10 11 12]
[ 1 2 3 4 5 6 7 8 9 10 11 12]
[13 14 15 16 17 18 19 20 21 22 23 24]
[13 14 15 16 17 18 19 20 21 22 23 24]]
沿第一维堆叠(Axis= 1)
stack1 = np.stack((a1, a1, a2, a2), axis=1)
print(stack1.shape)
> (12, 4)
print(stack1)
> [[ 1 1 13 13]
[ 2 2 14 14]
[ 3 3 15 15]
[ 4 4 16 16]
[ 5 5 17 17]
[ 6 6 18 18]
[ 7 7 19 19]
[ 8 8 20 20]
[ 9 9 21 21]
[10 10 22 22]
[11 11 23 23]
[12 12 24 24]]
用np.hstack()连接为长的一维数组(水平堆栈)
stack_long = np.hstack((a1, a2))
print(stack_long.shape)
> (24,)
print(stack_long)
> [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
创建多维数组(3D)
多维数组非常常见,称为张量。 它们在深度学习和神经网络中使用很多。 如果您要进行深度学习,则将定期重整张量或多维数组。
首先,我们创建两个不同的3 x 4数组。 稍后,我们将它们组合成一个3D阵列。
a1 = np.arange(1, 13).reshape(3, -1) # 3_4
a2 = np.arange(13, 25).reshape(3, -1) # 3_4
print(a1)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
print(a2)
> [[13 14 15 16]
[17 18 19 20]
[21 22 23 24]]
通过沿不同的轴/维度堆叠数组来创建3D数组
a3_0 = np.stack((a1, a2)) # default axis=0 (dimension 0)
a3_1 = np.stack((a1, a2), axis=1) # along dimension 1
a3_2 = np.stack((a1, a2), axis=2) # along dimension 2
print(a3_0.shape)
> (2, 3, 4)
print(a3_1.shape)
> (3, 2, 4)
print(a3_2.shape)
> (3, 4, 2)
让我们打印数组以查看它们的外观。 有关可视化的信息,请参见上图。
print(a3_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]]]
print(a3_1)
> [[[ 1 2 3 4]
[13 14 15 16]]
[[ 5 6 7 8]
[17 18 19 20]]
[[ 9 10 11 12]
[21 22 23 24]]]
print(a3_2)
> [[[ 1 13]
[ 2 14]
[ 3 15]
[ 4 16]]
[[ 5 17]
[ 6 18]
[ 7 19]
[ 8 20]]
[[ 9 21]
[10 22]
[11 23]
[12 24]]]
由于这三个3D数组是通过沿不同维度堆叠两个数组而创建的,因此,如果我们要从这些3D数组中检索原始的两个数组,则必须沿正确的维度/轴进行子集化。
测试:我们如何从这些3D数组中检索a1数组?
print(a1) # check what's a1
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
# solutions
a3_0[0, :, :]
a3_0[0] # same as above
a3_1[:, 0, :]
a3_2[:, :, 0]
展平多维数组
我们还可以使用ravel()展平多维数组。 下面,我们逐行浏览(默认顺序为" C")到一维数组。
print(a3_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]]]
print(a3_0.ravel())
> [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
逐列划定(order ='F')到一维数组
print(a3_0.ravel(order='F'))
> [ 1 13 5 17 9 21 2 14 6 18 10 22 3 15 7 19 11 23 4 16 8 20 12 24]
重塑多维数组
我们还可以使用reshape()重塑多维数组。
# reshape row by row (default order=C) to 2D array
print(a3_0) # 2_3_4
> [[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
[[13 14 15 16]
[17 18 19 20]
[21 22 23 24]]]
print(a3_0.reshape(4, -1)) # reshape to 4_6 (row by row)
> [[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]
[13 14 15 16 17 18]
[19 20 21 22 23 24]]
print(a3_0.reshape(4, -1, order='F')) # reshape (column by column)
> [[ 1 9 6 3 11 8]
[13 21 18 15 23 20]
[ 5 2 10 7 4 12]
[17 14 22 19 16 24]]
print(a3_0.reshape(4, 2, 3)) # reshape to 4_2_3 (row by row)
> [[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]
[[13 14 15]
[16 17 18]]
[[19 20 21]
[22 23 24]]]
结束语
我希望您现在对numpy如何重塑多维数组有了更好的了解。 我期待您的想法和评论。 另外,请查看有关numpy和数据表示的直观介绍。
(本文翻译自Hause的文章《Reshaping numpy arrays in Python — a step-by-step pictorial tutorial》,参考:https://towardsdatascience.com/reshaping-numpy-arrays-in-python-a-step-by-step-pictorial-tutorial-aed5f471cf0b)
相关推荐
- python入门到脱坑经典案例—清空列表
-
在Python中,清空列表是一个基础但重要的操作。clear()方法是最直接的方式,但还有其他方法也可以实现相同效果。以下是详细说明:1.使用clear()方法(Python3.3+推荐)...
- python中元组,列表,字典,集合删除项目方式的归纳
-
九三,君子终日乾乾,夕惕若,厉无咎。在使用python过程中会经常遇到这四种集合数据类型,今天就对这四种集合数据类型中删除项目的操作做个总结性的归纳。列表(List)是一种有序和可更改的集合。允许重复...
- Linux 下海量文件删除方法效率对比,最慢的竟然是 rm
-
Linux下海量文件删除方法效率对比,本次参赛选手一共6位,分别是:rm、find、findwithdelete、rsync、Python、Perl.首先建立50万个文件$testfor...
- 数据结构与算法——链式存储(链表)的插入及删除,
-
持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持上篇文章我们讲述了链表的基本概念及一些查找遍历的方法,本篇我们主要将一下链表的插入删除操作,以及采用堆栈方式如何创建链表。链...
- Python自动化:openpyxl写入数据,插入删除行列等基础操作
-
importopenpyxlwb=openpyxl.load_workbook("example1.xlsx")sh=wb['Sheet1']写入数据#...
- 在Linux下软件的安装与卸载(linux里的程序的安装与卸载命令)
-
通过apt安装/协助软件apt是AdvancedPackagingTool,是Linux下的一款安装包管理工具可以在终端中方便的安装/卸载/更新软件包命令使用格式:安装软件:sudoapt...
- Python 批量卸载关联包 pip-autoremove
-
pip工具在安装扩展包的时候会自动安装依赖的关联包,但是卸载时只删除单个包,无法卸载关联的包。pip-autoremove就是为了解决卸载关联包的问题。安装方法通过下面的命令安装:pipinsta...
- 用Python在Word文档中插入和删除文本框
-
在当今自动化办公需求日益增长的背景下,通过编程手段动态管理Word文档中的文本框元素已成为提升工作效率的关键技术路径。文本框作为文档排版中灵活的内容容器,既能承载多模态信息(如文字、图像),又可实现独...
- Python 从列表中删除值的多种实用方法详解
-
#Python从列表中删除值的多种实用方法详解在Python编程中,列表(List)是一种常用的数据结构,具有动态可变的特性。当我们需要从列表中删除元素时,根据不同的场景(如按值删除、按索引删除、...
- Python 中的前缀删除操作全指南(python删除前导0)
-
1.字符串前缀删除1.1使用内置方法Python提供了几种内置方法来处理字符串前缀的删除:#1.使用removeprefix()方法(Python3.9+)text="...
- 每天学点Python知识:如何删除空白
-
在Python中,删除空白可以分为几种不同的情况,常见的是针对字符串或列表中空白字符的处理。一、删除字符串中的空白1.删除字符串两端的空白(空格、\t、\n等)使用.strip()方法:s...
- Linux系统自带Python2&yum的卸载及重装
-
写在前面事情的起因是我昨天在测试Linux安装Python3的shell脚本时,需要卸载Python3重新安装一遍。但是通过如下命令卸载python3时,少写了个3,不小心将系统自带的python2也...
- 如何使用Python将多个excel文件数据快速汇总?
-
在数据分析和处理的过程中,Excel文件是我们经常会遇到的数据格式之一。本文将通过一个具体的示例,展示如何使用Python和Pandas库来读取、合并和处理多个Excel文件的数据,并最终生成一个包含...
- 【第三弹】用Python实现Excel的vlookup功能
-
今天继续用pandas实现Excel的vlookup功能,假设我们的2个表长成这样:我们希望把Sheet2的部门匹在Sheet1的最后一列。话不多说,先上代码:importpandasaspd...
- python中pandas读取excel单列及连续多列数据
-
案例:想获取test.xls中C列、H列以后(当H列后列数未知时)的所有数据。importpandasaspdfile_name=r'D:\test.xls'#表格绝对...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python自定义函数 (53)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python人脸识别 (54)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)