矩阵矩阵的维度矩阵按某一维度进行拼接
以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如下,也会报错
矩阵矩阵的维度矩阵按某一维度进行拼接相关推荐
- matlab二维度矩阵转化三维_Matlab三维矩阵运算
三维矩阵按页相乘: 问题:两个三维矩阵,按页进行矩阵相乘. A = rand(a1,a2,n); B = rand(a2,b2,n); C = zeros(a1,b2,n); for i=1:n C( ...
- 深度学习(目标跟踪和目标检测)--边界框bbox坐标转换(任意格式【list,numpy,tensor】、任意维度【向量、一维矩阵、二维矩阵】)
作者提示:可能存在错误,在我的电脑上可以运行: 写程序过程中发现不同的人写的边界框转换程序不一样, 有的只能转换numpy矩阵, 有的只能是转换tensor矩阵, 我就尝试着写了一个可以转换任何维度的 ...
- numpy合并不同维度矩阵_机器学习Web应用:如何使用NumPy?
大多数数据在我们拿到时,其形式很不实用,无法直接用机器学习算法处理.如上一个例子所见(上一节) ,数据中有些元素可能缺失,或某些列不是数值型,因此无法直接用机器学习技术处理.因而,机器学习专家通常花费 ...
- 将矩阵转为一行_矩阵与矩阵乘积简介
作者|Hadrien Jean 编译|VK 来源|Towards Data Science 原文链接:https://towardsdatascience.com/introduction-to-ma ...
- 矩阵论思维导图_矩阵求导与矩阵微分
矩阵求导与矩阵微分 符号定义 使用大写的粗体字母表示矩阵 使用小写的粗体字母表示向量 ,这里默认为列向量 使用小写的正体字母表示标量 需要明白的是,矩阵求导的意义在哪来,我们回想一下函数求 ...
- matlab矩阵基本操作,Matlab入门----矩阵的基本操作
注意:其他编程语言一次只能处理一个数字,而 MATLAB 可以轻松快捷地处理整个矩阵! 1.矩阵的创建 输入元素的明确列表 从外部数据文件加载矩阵 使用内置函数生成矩阵 使用自己的函数创建矩阵,并将其 ...
- 4.9-4.10 矩阵乘法的性质 矩阵的幂运算 矩阵的转置及其性质
矩阵乘法的性质 矩阵的乘法不遵守交换律 ! 矩阵乘法遵守结合律.分配律 对于任意r行c列的矩阵A,存在c行x列的矩阵O,满足:A . Ocx = Orx 对于任意r行c列的矩阵A,存在x行r列的矩阵O ...
- python 矩阵 将所有列向量合并成一个向量 将虚数矩阵转化为实数矩阵
有M✖️N 维度的矩阵,将它转化为MN✖️1的矩阵 import numpy as np from numpy import squeezeM, N = 4, 3 h_mat = np.random. ...
- Python矩阵计算类:计算矩阵加和、矩阵乘积、矩阵转置、矩阵行列式值、伴随矩阵和逆矩阵
最近在Python程序设计中遇到一道设计矩阵计算类的题目,原题目要求计算矩阵加和和矩阵乘积,而我出于设计和挑战自己的目的,为自己增加难度,因此设计出矩阵计算类,不仅可以求出矩阵加和和矩阵乘积,还能计算 ...
最新文章
- Windows环境变量
- PowerBI 2019.12更新完美收官2019
- python map lambda表达式_Python的lambda表达式、filter、map、reduce等函数的用法
- 《Velocity 模板使用指南》中文版[转]
- 详解:物理地址,虚拟地址,内存管理,逻辑地址之间的关系
- 什么是用户故事 (User Story)?
- linux内核各版本的下载路径
- 全球时区 简称 缩写 简介 PST EST GMT CST EDT UTC 等
- Oracle Analyze 命令 详解
- 修改jupyter notebook的默认浏览器
- 系统组件:工具栏Toolbar
- 计算机动画的应用 ppt,你也是幼教 用PPT制作识字动画
- MATLAB repmat函数的使用
- form表单提交数据到服务器
- 神器-可视化分析之Basemap实战详解(二)
- YC全球总裁:我招揽陆奇好多年,如今终于如愿了!
- 体检之一:体检豪华套餐
- 【密码专栏】动手计算双线性对(下)
- 控制器增益大小对控制器性能的影响
- ffmpeg http.c解析学习及以及对于ffmpeg解析http框架