以Numpy为例介绍,但是不仅仅适用于ndarry;

只要是矩阵按照axis=k这种方式拼接都满足如下方式

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

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

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

2.  矩阵的维度介绍:

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如下,也会报错

矩阵矩阵的维度矩阵按某一维度进行拼接相关推荐

  1. matlab二维度矩阵转化三维_Matlab三维矩阵运算

    三维矩阵按页相乘: 问题:两个三维矩阵,按页进行矩阵相乘. A = rand(a1,a2,n); B = rand(a2,b2,n); C = zeros(a1,b2,n); for i=1:n C( ...

  2. 深度学习(目标跟踪和目标检测)--边界框bbox坐标转换(任意格式【list,numpy,tensor】、任意维度【向量、一维矩阵、二维矩阵】)

    作者提示:可能存在错误,在我的电脑上可以运行: 写程序过程中发现不同的人写的边界框转换程序不一样, 有的只能转换numpy矩阵, 有的只能是转换tensor矩阵, 我就尝试着写了一个可以转换任何维度的 ...

  3. numpy合并不同维度矩阵_机器学习Web应用:如何使用NumPy?

    大多数数据在我们拿到时,其形式很不实用,无法直接用机器学习算法处理.如上一个例子所见(上一节) ,数据中有些元素可能缺失,或某些列不是数值型,因此无法直接用机器学习技术处理.因而,机器学习专家通常花费 ...

  4. 将矩阵转为一行_矩阵与矩阵乘积简介

    作者|Hadrien Jean 编译|VK 来源|Towards Data Science 原文链接:https://towardsdatascience.com/introduction-to-ma ...

  5. 矩阵论思维导图_矩阵求导与矩阵微分

    矩阵求导与矩阵微分 符号定义 ​ 使用大写的粗体字母表示矩阵 ​ 使用小写的粗体字母表示向量 ,这里默认为列向量 ​ 使用小写的正体字母表示标量 需要明白的是,矩阵求导的意义在哪来,我们回想一下函数求 ...

  6. matlab矩阵基本操作,Matlab入门----矩阵的基本操作

    注意:其他编程语言一次只能处理一个数字,而 MATLAB 可以轻松快捷地处理整个矩阵! 1.矩阵的创建 输入元素的明确列表 从外部数据文件加载矩阵 使用内置函数生成矩阵 使用自己的函数创建矩阵,并将其 ...

  7. 4.9-4.10 矩阵乘法的性质 矩阵的幂运算 矩阵的转置及其性质

    矩阵乘法的性质 矩阵的乘法不遵守交换律 ! 矩阵乘法遵守结合律.分配律 对于任意r行c列的矩阵A,存在c行x列的矩阵O,满足:A . Ocx = Orx 对于任意r行c列的矩阵A,存在x行r列的矩阵O ...

  8. python 矩阵 将所有列向量合并成一个向量 将虚数矩阵转化为实数矩阵

    有M✖️N 维度的矩阵,将它转化为MN✖️1的矩阵 import numpy as np from numpy import squeezeM, N = 4, 3 h_mat = np.random. ...

  9. Python矩阵计算类:计算矩阵加和、矩阵乘积、矩阵转置、矩阵行列式值、伴随矩阵和逆矩阵

    最近在Python程序设计中遇到一道设计矩阵计算类的题目,原题目要求计算矩阵加和和矩阵乘积,而我出于设计和挑战自己的目的,为自己增加难度,因此设计出矩阵计算类,不仅可以求出矩阵加和和矩阵乘积,还能计算 ...

最新文章

  1. Windows环境变量
  2. PowerBI 2019.12更新完美收官2019
  3. python map lambda表达式_Python的lambda表达式、filter、map、reduce等函数的用法
  4. 《Velocity 模板使用指南》中文版[转]
  5. 详解:物理地址,虚拟地址,内存管理,逻辑地址之间的关系
  6. 什么是用户故事 (User Story)?
  7. linux内核各版本的下载路径
  8. 全球时区 简称 缩写 简介 PST EST GMT CST EDT UTC 等
  9. Oracle Analyze 命令 详解
  10. 修改jupyter notebook的默认浏览器
  11. 系统组件:工具栏Toolbar
  12. 计算机动画的应用 ppt,你也是幼教 用PPT制作识字动画
  13. MATLAB repmat函数的使用
  14. form表单提交数据到服务器
  15. 神器-可视化分析之Basemap实战详解(二)
  16. YC全球总裁:我招揽陆奇好多年,如今终于如愿了!
  17. 体检之一:体检豪华套餐
  18. 【密码专栏】动手计算双线性对(下)
  19. 控制器增益大小对控制器性能的影响
  20. ffmpeg http.c解析学习及以及对于ffmpeg解析http框架

热门文章

  1. LTspice introduction - 5 Complex and AC analysis
  2. vuejs 数组定义字段_一个漂亮的文本字段,用于格式化VueJS制作的电话号码
  3. 视频号该如何涨粉引流,分享10种涨粉技巧+5种引流方法丨国仁网络
  4. python实现用程序给自己发邮件
  5. 财经观察:“脱欧”不确定性持续拖累英国经济
  6. 如何学习一项新的IT技术
  7. OSI模型及数据封装过程
  8. web概念介绍、软件架构、静态资源
  9. linux安装pgadmin4--postgresql管理工具
  10. 上大学时做的linux上视频传输的程序