矩阵&矩阵的维度&矩阵按某一维度进行拼接

以Numpy为例介绍,但是不仅仅适用于ndarry;
只要是矩阵按照axis=k这种方式拼接都满足如下方式

  1. Numpy的一个很重要的数据类型就是ndarry

NumPy Ndarray 对象 | 菜鸟教程 (runoob.com)

Numpy:矩阵拼接_dyhBUPT的博客-CSDN博客_numpy矩阵拼接

  1. 矩阵的维度介绍:

矩阵&矩阵的维度&矩阵按某一维度进行拼接

2.1 维度标号:

首先,我们来明确一下,矩阵的维度指的都是啥,怎么标序号的:

这样方便我们知道拼接的时候,怎么按照维度拼接:

维度的编号方式是从外往里依次递增,即:

矩阵&矩阵的维度&矩阵按某一维度进行拼接

因此,矩阵n的维度就是dim=[3×2×1]

解释一下:矩阵n在第0维的有3个下一维度的内容(即,矩阵n有3个一维的内容)

同理:矩阵n在第1维的有2个下一维度的内容( 即,有两个二维的内容)

矩阵n在第2维的有1个下一维度的内容( 即,有1个三维的内容)

2.2 一个概念:”矩阵k维的内容”

【注意】这个概念是我自己定义的,非官方,,只是为了方便理解 :

假设矩阵 tmp 内容为:

tmp = [ [ [1],[2],[3],[4] ] ,
        [ [5],[6],[7],[8] ] ,
        [ [9],[8],[3],[2] ]   ]

此时的矩阵tmp有三个维度,tmp为一个[3×4×1]的矩阵

那么,tmp的0维内容有三个,是:

位置为第0的:[ [1], [2], [3], [4] ]

位置为第1的:[ [5], [6], [7], [8] ]

位置为第2的:[ [9], [8], [3], [2] ]

解释一下,为啥说0维内容有三个:因为我自己这个”第k维的内容”的定义就是说:第k维包括几个第k+1维的内容。

至于位置,这个也强调一下,是因为在进行矩阵间的拼接时,要将对应位置的矩阵按序append在同一位置,(但对于axis=0这种就没啥强调位置的必要了,之后会说)

tmp的1维内容有四个:

但是,tmp有三个1维的内容,每个1维的内容包括四个2维的内容,

我们以一个tmp为1维的内容为例(以[1], [2], [3], [4] 为例):

那么其包括的内容有四个,分别是:

位置为第0的:[1]

位置为第1的:[2]

位置为第2的:[3]

位置为第3的:[4]

tmp的2维内容有一个:

但是,tmp有三个1维的内容,每个1维的内容包括四个2维的内容,每个2维内容包括1个内容:

我们以一个tmp为2维的内容为例(以 1 为例):

位置为第0的:1

2.3 两个矩阵按axis=k方式拼接[This]:

总言之:

k维的内容就是,把 矩阵 的第k维及其外侧的[ ]都脱掉 剩下的内容就是 第k维的内容

于是,以axis=k进行两个矩阵相拼接,就是将dim=k的内容,拢在一起:拢在一起时也注意,是对应位置拢在一起

这个”对应位置拢到一起”中对应位置的理解,如下:

矩阵&矩阵的维度&矩阵按某一维度进行拼接

其实看图也可以理解出来:

以axis=k来拼接,结果output 就只能是第 k 这个维度的数值 发生改变:

output的其他维度数值都不会改变,

且, 第 k 这个维度的数值 = p和q两个矩阵其 第k维 的值相加和

2.4 矩阵拼接时注意矩阵的维度和axis的对应:

(1)首先,我们要明确一个原则:

对于ndarry来说,不能(不建议)定义各个维度的内容维度不一致的矩阵,

即,不建议(已弃用)定义这个样子的矩阵:

n = np.array( [ [ ['a','fff'],['b','kkk'] ] ,
                [ ['c'],['d'] ] ,
                [ ['e'],['f'] ] ] )

会出现这样的报错:

VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.

  [ ['e'],['f'] ] ] )

有了这个原则,我们就可以比较好理解为啥拼接的时候会报错。

我们拼接的时候,并不是长成啥样的矩阵都可以去拼接的。

两个矩阵在 axis=k 处可以拼接,得满足:

假如m,n矩阵要在axis=k处进行拼接,那么,除了dim=k这个维度的两个矩阵的内容len不一致以外,其他维度的内容的len得全部一致

例如,下述的两个矩阵m,n就只能在axis=1处进行拼接,在其他维度进行拼接就会报错

m = [ [ [1],[2],[3],[4] ] ,
      [ [5],[6],[7],[8] ] ,
      [ [9],[8],[3],[2] ]   ]

n = [ [ ['a'],['b'] ],
      [ ['c'],['d'] ],
      [ ['e'],['f'] ]  ]

由于在axis=k这个维度进行拼接,需要做的是将dim=k的内容按对应位置拢在一起就可以了

即,如下例所示:以axis=1来拼接m和n矩阵,将dim=1的内容拢在一起就可以了

矩阵&矩阵的维度&矩阵按某一维度进行拼接

现在,还是这两个矩阵m[3×4×1] 和 n[3×2×1] , 为什么以axis=0来拼接就不对了呢?

回顾我们之前的原则,要求,对于ndarry来说,同一维度的内容其len要保持一致

那么,如果我们坚持要将 m 和 n 矩阵以 axis=0 方式拼接,就会得到如下的output(这个只能自己手写一下,代码执行会报错,因为不符合ndarry的数据规则)

以axis=0方式拼接,就是将m和n两个矩阵的对应位置的dim=0的内容拢在一起,那output就会长这个样子:

矩阵&矩阵的维度&矩阵按某一维度进行拼接

显然,output的dim=1时的len不同,前三个len=4,后三个len=2。这就是为啥不让以axis=0方式拼接m,n两个矩阵,会报错的原因。

同理,若坚持要以axis=2来拼接两个矩阵m和n,那么,output如下,也会报错

矩阵&矩阵的维度&矩阵按某一维度进行拼接

Original: https://blog.csdn.net/qq_41764621/article/details/127141894
Author: chuanauc
Title: 矩阵&矩阵的维度&矩阵按某一维度进行拼接

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/758128/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Flask渲染Jinja2模板

    模板是一个 web开发必备的模块。因为我们在渲染一个网页的时候,并不是只渲染一个纯文本字符串,而是需要渲染一个有富文本标签的页面。这时候我们就需要使用模板了。在 Flask中,配套…

    Python 2023年8月11日
    040
  • 通俗图解NumPy数据处理方法

    NumPy 1.向量-一维数组 * 1.1 初始化 – 1.1.1 向量初始化 1.1.2 其他初始化向量方法 1.1.3 序列数组初始化 1.1.4 随机数组初始化 …

    Python 2023年8月28日
    068
  • Python使用python-snap7实现西门子PLC通讯

    Python简介 Python是开源的高级编程语言之一,广泛应用于人工智能、数据分析、爬虫等领域。由于它拥有大量的开源库和标准库,以及简单且贴近自然语言的语法,所以即便是从未接触过…

    Python 2023年8月2日
    062
  • 学习ASP.NET Core Blazor编程系列十——路由(上)

    Web应用程序的可以通过URL将多个页面串联起来,达成一个组件功能,并且可以互相跳转。我们开发系统的时候总是需要使用路由来实现页面之间的跳转。ASP.NET Core MVC或是A…

    Python 2023年10月16日
    028
  • 11.字段类型

    上一章我们使用了字符串与数字类型的数据,下面我们统一介绍一下常用的字段类型 在下面创建字段的时候,最开始的中文都是不必要的,我们可给可不给 目录 1 布尔类型 BooleanFie…

    Python 2023年8月4日
    048
  • 【nginx】使用 sub_filter 注入 js 代码,例如 google analysis 等

    1. 创建 GA[1] 2. 注入代码[2] 3. 结果 网站 F12 GA 控制台 其他用处案例:给页面末尾添加文字 Reference 在一项工作中,已经将内网的一个网站通过 …

    Python 2023年10月19日
    042
  • 3.爬虫之Scrapy框架的安装与使用

    1. Scrapy框架 1.1 介绍 Scrapy是一个开源和协作框架, 可以用于数据挖掘, 监测, 自动化测试, 获取API所有返回的数据或网络爬虫. Scrapy是基于twis…

    Python 2023年10月3日
    041
  • 用Python实现股价的简单移动平均值

    前言 最近有没有朋友想买股票和基金?今天我要教你们一件神奇的事情,如何计算平均值。没有人不喜欢钱。 [En] Are there any friends who want to b…

    Python 2023年5月24日
    070
  • cJson 学习笔记

    cJson 学习笔记 一、前言 思考这么一个问题:对于不同的设备如何进行数据交换?可以考虑使用轻量级别的 JSON 格式。 那么需要我们手写一个 JSON 解析器吗?这大可不必,因…

    Python 2023年10月14日
    043
  • 我看谁还不懂多线程之间的通信+基础入门+实战教程+详细介绍+附源码

    一、多线程之间的通信(Java版本) 1、多线程概念介绍 多线程概念 在我们的程序层面来说, 多线程通常是在每个 …

    Python 2023年10月16日
    044
  • 【Python】Numpy傅里叶变换总结

    文章目录 * – 简介 – fft 简介 Fourier变换极其逆变换在数学上的定义如下 F ( ω ) = ∫ − ∞ ∞ f ( t ) e − i ω…

    Python 2023年8月26日
    057
  • 一篇了解全MVCC

    一篇就够,了解透MVCC 一、什么是MVCC MVCC,全称Multi-Version Concurrency Control,即多版本并发控制,是一种并发控制的方法,一般用在数据…

    Python 2023年10月17日
    041
  • python基础:try…except…的详细用法

    我们把可能发生错误的语句放在try模块里,用except来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except后没有指定异常,则默认处理所有…

    Python 2023年8月1日
    0122
  • 【yolov5s中加入DCNv2(可变形卷积v2)】

    yolov5s中加入DCNv2(可变形卷积v2) Requirement torch>=1.8.1torchvision>=0.9.1 实现步骤 1.测试环境是否满足要…

    Python 2023年9月30日
    051
  • Python:通过网络爬虫实现一个简易控制台音乐播放器

    hello,大家好,我是wangzirui32,今天我们来学习如何通过网络爬虫实现一个简易控制台音乐播放器,开始学习吧! 项目结构及库准备 本项目使用的第三方库安装命令: pip …

    Python 2023年9月18日
    058
  • 深入理解docker信号机制以及dumb-init的使用

    一、前言 ● 容器中部署的时候往往都是直接运行二进制文件或命令,这样对于容器的作用更加直观,但是也会出现新的问题,比如子进程的资源回收、释放、托管等,处理不好,便会成为可怕的僵尸进…

    Python 2023年6月10日
    058
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球