杨桃的Python进阶讲座18——数组array(八)如何从一维数组扩展为二维数组以及再次降为一维数组

2023-11-19

本人CSDN博客专栏:https://blog.csdn.net/yty_7

Github地址:https://github.com/yot777/

 

reshape()函数将一维数组升维成二维数组

首先我们由一个列表转换为NpArray数组:

>>> import numpy as np
>>> s=[1,2,3,4,5]             #原始列表s
>>> ss1=np.array(s)          #将列表s(包含全部元素)转换为NpArray
>>> print(ss1)
[1 2 3 4 5]
>>> ss2=np.array(s[:])        #将列表s(包含全部元素)转换为NpArray
>>> print(ss2)
[1 2 3 4 5]
>>> ss3=np.array(s[1:4])      #将s从索引1到4-1=3的元素转换为NpArray
>>> print(ss3)
[2 3 4]

这时候的ss1是一维数组,第一维包含5个元素

>>> np.shape(ss1)
(5,)
>>> ss1.shape[0]      #ss1是一维数组,因此只有shape[0]的值
5
>>> len(ss1)          #一维数组的长度就是shape[0]的值(即元素个数)
5

然后将ss1扩展为二维数组,怎么做呢?用reshape()函数就行,注意用法:

>>> sss1 = ss1.reshape((1,ss1.shape[0]))   #注意reshape函数有两个括号!
    #reshape((x,y))表示构成一个x行y列的新数组
    #这里的x=1, y= ss1.shape[0]表示将ss1在原样基础上再增加一个维度
>>> print(sss1)
[[1 2 3 4 5]]

用矩阵的观点来看,sss1现在就形成了一个1行5列(1X 5)矩阵

因此我们shape一下sss1可以看到:

>>> np.shape(sss1)    
(1, 5)
>>> sss1.shape[0]       #对于二维数组,shape[0]表示第二维的元素个数
1
>>> sss1.shape[1]       #对于二维数组,shape[1]表示第一维的元素个数
5
>>> len(sss1)           #对于二维数组,len()函数表示第二维的元素个数
1
>>> len(sss1[0])
5

还可以使用np.squeeze()函数获得二维数组的各种行、列切片,如下:

>>> print(np.squeeze(sss1[0]))
[1 2 3 4 5]
>>> print(np.squeeze(sss1[:,0]))
1
>>>
>>> print(np.squeeze(sss1[:,2]))
3
>>>
>>> print(np.squeeze(sss1[:,:3]))
[1 2 3]

和之前我们讲过的规则一样:

二维数组的索引,如果[]以数字或者单冒号开头,表示取行元素。

二维数组的索引,如果[]以冒号逗号(:,)开头,表示取列元素。

 

np.vstack()函数将扩充二维数组

使用np.vstack()函数往已有的二维数据添加第二维度的数据(可以理解为矩阵添加行)

>>> import numpy as np
>>> print(sss1)
[[1 2 3 4 5]]
>>> sss1=np.vstack([sss1,[6,7,8,9,10]]) 
>>> print(sss1)
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]]
>>> np.shape(sss1)
(2, 5)
>>> sss1.shape[0]
2
>>> sss1.shape[1]
5
>>> len(sss1)
2
>>> len(sss1[0])
5

用矩阵的观点来看,sss1现在就形成了一个2行5列(2 X 5)矩阵

再次使用np.squeeze()函数:

>>> print(np.squeeze(sss1[0]))
[1 2 3 4 5]
>>> print(np.squeeze(sss1[1]))
[ 6  7  8  9 10]
>>> print(np.squeeze(sss1[0:2]))
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]]
>>> print(np.squeeze(sss1[:,0:2]))
[[1 2]
 [6 7]]
>>> print(np.squeeze(sss1[:,4]))
[ 5 10]

reshape()函数将二维数组降维成一维数组

如何把二维数组sss2再变回一维数组?同样使用reshape()函数:

>>> sss1.shape[0]           #sss1数组的行数
2
>>> sss1.shape[1]           #sss1数组的列数
5
>>> sss2=sss1.reshape((sss1.shape[0]*sss1.shape[1]))   
# 即sss2=sss1.reshape((10))
>>> print(sss2)
[ 1  2  3  4  5  6  7  8  9 10]

如果是:

sss2.reshape((10,1))       #形成一个10行1列的二维数组
array([[ 1],
       [ 2],
       [ 3],
       [ 4],
       [ 5],
       [ 6],
       [ 7],
       [ 8],
       [ 9],
       [10]])
>>> sss2.reshape((5,2))     #形成一个5行2列的二维数组
array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [ 7,  8],
       [ 9, 10]])

可见,reshape()函数可以实现升维、降维,以及对同维度的数组改变行列数的操作。

需要注意的是,同维度的数组改变行列数一定要有合理性,比如一个(3, 4)的数组可以用reshape()函数改为(2,6)或者(6,2)或者(12,1)或者(1,12),但是无法改成行数为5的数组。

特例:二维向量变成一个一维向量的超简便方法,直接写reshape((-1))

注意-1是用两对括号包起来的:

>>> sss2=sss1.reshape((-1))
>>> print(sss2)
[ 1  2  3  4  5  6  7  8  9 10]

reshape((-1))也有两个参数的写法:

>>> sss3=sss1.reshape((1,-1))
>>> print(sss3)
[[ 1  2  3  4  5  6  7  8  9 10]]
>>> sss4=sss1.reshape((-1,1))
>>> print(sss4)
[[ 1]
 [ 2]
 [ 3]
 [ 4]
 [ 5]
 [ 6]
 [ 7]
 [ 8]
 [ 9]
 [10]]

可见,reshape((-1))是Python自动计算的原二维数组的所有元素个数,这样用也行:

>>> sss5=sss1.reshape((-1,2))
>>> print(sss5)
[[ 1  2]
 [ 3  4]
 [ 5  6]
 [ 7  8]
 [ 9 10]]

总之,reshape((m,n))是将二维数组重新划分为m行n列:

如果n缺失成为reshape((m)),就是一个一维向量。

reshape((-1)):原二维数组的所有元素组成的一个一维向量

reshape((-1,n)):行数是原二维数组的所有元素个数除以n的值列数为n

reshape((m,-1)):行数是m,列数是原二维数组的所有元素个数除以m的值

 

总结

reshape()函数既可以将一维数组升维成二维数组,也可以将二维数组降维成一维数组,以及对同维度的数组改变行列数的操作。

使用np.vstack()函数往已有的二维数据添加第二维度的数据(可以理解为矩阵添加行)。

reshape((m,n))是将二维数组重新划分为m行n列:

如果n缺失成为reshape((m)),就是一个一维向量。

reshape((-1)):原二维数组的所有元素组成的一个一维向量

reshape((-1,n)):行数是原二维数组的所有元素个数除以n的值列数为n

reshape((m,-1)):行数是m,列数是原二维数组的所有元素个数除以m的值

 

本人CSDN博客专栏:https://blog.csdn.net/yty_7

Github地址:https://github.com/yot777/

如果您觉得本篇本章对您有所帮助,欢迎关注、评论、点赞!Github欢迎您的Follow、Star!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

杨桃的Python进阶讲座18——数组array(八)如何从一维数组扩展为二维数组以及再次降为一维数组 的相关文章

  • 高效地将大型 Pandas 数据帧写入磁盘

    我正在尝试找到使用 Python Pandas 高效地将大型数据帧 250MB 写入磁盘或从磁盘写入的最佳方法 我已经尝试了所有方法Python 数据分析 但表现却非常令人失望 这是一个更大项目的一部分 该项目探索将我们当前的分析 数据管理
  • Django 查询:“datetime + delta”作为表达式

    好吧 我的问题如下 假设我有下一个模型 这是一个简单的情况 class Period models Model name CharField field specs here start date DateTimeField field s
  • 如何使用 python、openCV 计算图像中的行数

    我想数纸张 所以我正在考虑使用线条检测 我尝试过一些方法 例如Canny HoughLines and FLD 但我只得到处理过的照片 我不知道如何计算 有一些小线段就是我们想要的线 我用过len lines or len contours
  • Python函数组成

    我尝试使用良好的语法来实现函数组合 这就是我所得到的 from functools import partial class compfunc partial def lshift self y f lambda args kwargs s
  • 如何将脚本作为 pytest 测试运行

    假设我有一个用简单脚本表示的测试assert 陈述 请参阅背景了解原因 例如 import foo assert foo 3 4 我如何以一种好的方式将该脚本包含在我的 pytest 测试套件中 我尝试了两种有效但不太好的方法 一种方法是将
  • 烧瓶 - 404 未找到

    我是烧瓶开发的新手 这是我在烧瓶中的第一个程序 但它向我显示了这个错误 在服务器上找不到请求的 URL 如果您输入了网址 请手动检查拼写并重试 这是我的代码 from flask import Flask app Flask name ap
  • Pandas如何按时间段过滤DataFrame

    我有一个包含下表的文件 Name AvailableDate totalRemaining 0 X3321 2018 03 14 13 00 00 200 1 X3321 2018 03 14 14 00 00 200 2 X3321 20
  • 如何仅注释堆积条形图的一个类别

    我有一个数据框示例 如下所示 data Date 2021 07 18 2021 07 19 2021 07 20 2021 07 21 2021 07 22 2021 07 23 Invalid NaN 1 1 NaN NaN NaN N
  • Bokeh 中单独的节点和边缘悬停工具?

    我正在尝试为 Bokeh 中的节点和边缘获取单独的悬停工具提示 但未能使其正常工作 有人可以指出我做错了什么吗 我相信代码应该如下所示 from bokeh io import show output notebook from bokeh
  • Django 1.7 应用程序配置导入错误:没有名为 appname.apps 的模块

    我正在尝试按照以下文档为我的一个名为 文章 的 Django 应用程序设置自定义应用程序配置https docs djangoproject com en dev ref applications https docs djangoproj
  • django 中的身份验证方法返回 None

    你好 我在 django 中做了一个简单的注册和登录页面 当想要登录时 登录视图中的身份验证方法不返回任何内容 我的身份验证应用程序 模型 py from django db import models from django contri
  • 将 Python Selenium 输出写入 Excel

    我编写了一个脚本来从在线网站上抓取产品信息 目标是将这些信息写入 Excel 文件 由于我的Python知识有限 我只知道如何在Powershell中使用Out file导出 但结果是每个产品的信息都打印在不同的行上 我希望每种产品都有一条
  • 我可以在 if 语句中使用“as”机制吗

    是否可以使用as in if类似的声明with我们使用的 例如 with open tmp foo r as ofile do something with ofile 这是我的代码 def my list rtrn lst True if
  • 更新 matplotlib 中颜色条的范围

    我想更新一个contourf在函数内绘制 效果很好 然而 数据的范围发生了变化 因此我还必须更新颜色条 这就是我未能做到的地方 请参阅以下最小工作示例 import matplotlib pyplot as plt import numpy
  • RuntimeError(f"目录 '{directory}' 不存在") RuntimeError: 目录 'app/static' 不存在

    当我运行 server py 文件时出现错误 File C Users nawin AppData Local Programs Python Python38 lib site packages starlette staticfiles
  • 在 for 循环中访问 itertools 产品的元素

    我有一个列表列表 是附加 itertools 产品的一些其他结果的结果 我想要的是能够使用 for 循环访问列表列表中列表的每个元素 但我无法访问所有元素 我只能访问最后一个列表的元素 结果是一个非常巨大的列表列表 例如 1 2 4 3 6
  • Python RE(总之检查第一个字母是否区分大小写,其余部分不区分大小写)

    在下面的情况下 我想匹配字符串 Singapore 其中 S 应始终为大写 其余单词可能为小写或大写 但在下面的字符串 s 是小写的 它在搜索条件中匹配 任何人都可以让我知道如何实施吗 import re st Information in
  • 在 anaconda 环境下运行 qsub

    我有一个程序 通常在 Linux 的 conda 环境中运行 因为我用它来管理我的库 指令如下 source activate my environment python hello world py 我怎样才能跑你好世界 py在与 PBS
  • 避免“散点/点/蜂群”图中的数据点重叠

    使用绘制点图时matplotlib 我想偏移重叠的数据点以使它们全部可见 例如 如果我有 CategoryA 0 0 3 0 5 CategoryB 5 10 5 5 10 我想要每一个CategoryA 0 数据点并排设置 而不是彼此重叠
  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构

随机推荐

  • Spark 任务调度机制

    1 Spark任务提交流程 Spark YARN Cluster模式下的任务提交流程 如下图所示 图YARN Cluster任务提交流程 下面的时序图清晰地说明了一个Spark应用程序从提交到运行的完整流程 图Spark任务提交时序图 提交
  • 不要一上来就学框架

    问 有两年多前端经验 但感觉自己对后端知之甚少 没有安全感 但是后端语言又多 不知道学哪一门性价比好一些 求教 语言不是重点 尤其是你已经会一门语言的情况下 后端编程最最基本的技术是这些 1 浏览器和服务器是怎么打交道的 重点就是HTTP协
  • Faster RCNN代码详解(四):关于anchor的前世今生

    在上一篇博客中介绍了数据处理的整体结构 Faster RCNN代码详解 三 数据处理的整体结构 这一篇博客介绍数据处理的细节 关于anchor的前世今生 代码在脚本的 mx rcnn rcnn io rpn py的assign anchor
  • React路由懒加载的实现

    React lazy 通过引入lazy Suspense两个方法实现路由懒加载 首先 我们需要在组件中引入lazy Suspense这两个方法 然后我们需要通过Suspense组件 包裹着注册路由 import React Componen
  • 有码变无码:Google Brain 把模糊人脸变成清晰画面

    转自 新浪科技 tech sina com cn it 2017 02 08 doc ifyaexzn9228446 shtml 谷歌旗下人工智能部门 谷歌大脑 设计了一款全新软件 可以把马赛克一样的源图片还原成清晰图片 简而言之 原本 打
  • mapper中resultMap生成器

    public class MybatisUtil 获取bean的属性 根据属性评价 resultMap 并将驼峰修改为 public static String getResultMap Class
  • Vue框架--Ruoyi解析(前端)

    路由router注册 router目录下的 index js 配合 permission js 是整套vue前端项目的权限判断核心 index js 里面的path 配置都是一些不会与权限挂钩的路由 例如 404 登录页面路径等 permi
  • JDK1.8 新特性之常用函数式接口

    目录 常用4种函数式接口 Supplier接口 Consumer接口 Function接口 Predicate 接口 常用的函数式接口主要在java util function包下 函数式接口是Lambda表达式使用的前提 而Lambda表
  • 2023年最详细零基础Python爬虫教程,入门学习分三个阶段

    爬虫Python入门好学吗 学爬虫需要具备一定的基础 有编程基础学Python爬虫更容易学 但要多看多练 有自己的逻辑想法 用Python达到自己的学习目的才算有价值 如果是入门学习了解 开始学习不难 但深入学习有难度 特别大项目 大部分爬
  • 基于Matlab的门控循环单元GRU数据预测

    基于Matlab的门控循环单元GRU数据预测 随着人工智能技术的迅猛发展 数据预测成为重要的挑战之一 门控循环单元GRU是一种新兴的神经网络结构 其在处理序列数据方面具有优异的性能 本文将介绍如何使用Matlab实现门控循环单元GRU进行数
  • Office2016简体中文专业版32/64

    仅供参考 链接 https pan baidu com s 1QklpJzxzWDuFnsXX 6z9SA 提取码 4kd0
  • 黑盒测试与白盒测试的定义与区别

    白盒测试 是指实际运行被测程序 通过程序的源代码进行测试而不使用用户界面 这种类型的测试需要从代码句法发现内部代码在算法 溢出 路径和条件等方面的缺点或者错误 进而加以修正 黑盒测试 又称功能测试 数据驱动测试或基于规格说明的测试 是通过使
  • reactnative环境搭建-windows

    一 安装依赖 1 Node 以下为两种安装方式 1为基本安装 2为通过管理工具安装 1 按照教程步骤安装指定版本的node Node js 安装配置 注意 Node 的版本应大于等于 14 默认安装在C盘 如果自定义安装了其他盘需要配置环境
  • OpenCV入门【C++版】

    OpenCV基础入门 C 语言 Chapter1 读取图片 视频 摄像头 从文件读取图片 从文件读取视频 读摄像头 Chapter2 基础函数 Chapter3 调整和剪裁 Chapter4 绘制形状和文字 Chapter5 透视变换 Ch
  • Logback 自定义Appender发送预警

    1 自定义Appender 目的 接收日志消息 现将日志通过http接口发送到预警服务 package com test service appender import ch qos logback classic spi LoggingE
  • Unity -Input

    Unity Input详解 Unity中的InputManager输入控制器 Input属性方法详解 属性 方法 Unity中的InputManager输入控制器 Name 按键名 该键的名称 可以在脚本编程中直接引用他 比如 Input
  • 硬件基础之集成运放

    一 技术理论 1 集成电路 集成电路是采用专门的制造工艺 在半导体单晶硅上 把晶体管 场效应管 二极管 电阻和电容等元器件以及它们之间的连线所组成的电路制作在一起 使其具有特定功能的芯片 2 集成运放 集成运放 全称集成运算放大器 是具有超
  • 部署多台服务器,动态配置前端请求的ip地址

    需求 前后端分离的项目 需要部署多台服务器 但是不想频繁修改前端配置的ip地址 故需要需要动态配置 解决 发送请求时的url默认获取服务器的ip function getBaseUrl const url location href toS
  • 深入剖析Nginx日志:常用分析技巧汇总

    前言 本来只是想写一篇Nginx日志的常用统计分析命令填充一下线上文档 虽然有点用但是觉得光写命令 文档太水了 于是就顺便总结一下 在nginx或web服务中 需要有哪些进行分析的内容以及为什么有这些需求 ps 统计命令的原因 在于不是每个
  • 杨桃的Python进阶讲座18——数组array(八)如何从一维数组扩展为二维数组以及再次降为一维数组

    本人CSDN博客专栏 https blog csdn net yty 7 Github地址 https github com yot777 用reshape 函数将一维数组升维成二维数组 首先我们由一个列表转换为NpArray数组 gt g