清晨晓叙:matlab中的矩阵拼接

参考:https://zhidao.baidu.com/question/335503359.html
https://baike.baidu.com/item/repmat/8599219?fr=aladdin

在等待了半个小时之后,终于走进了实验室,娜小笑同学还没来,可是故事已经开始了。
在看别人的梯度下降算法的实现的code的时候,遇到了一些很小的疑问。因为繁琐,所以想把这些记录下来,既为自己做笔记,也为那些后来者。

size函数

首先需要介绍的是size函数,因为其使用简单我就一笔带过,size(x,1)
size(x,2),size(x,3)可分别获取一个矩阵的行数,列数以及通道数。
实验的代码如下,有兴趣的可以加深一下印象。

x =[1 2 3 4;5 6 7 8];
% 获取x的行数
m = size(x,1);
n = size(x,2);
z = size(x,3);

从低维矩阵到高维矩阵

当时为了测试size的时候,想找一个3维的矩阵,但是发现居然忘了repmat函数的使用,那就顺便说一下如何利用repmat函数构建3维矩阵。当然在叙述之前,其实我们还是可以用一些笨方法去完成从2维矩阵到3维矩阵的“跳跃”。当然这很繁琐,但是你要先会实现需求,才能去谈优化,不是吗?

实现代码

% 笨方法 
x = [1 2 3 4;5 6 7 8];
% 开辟一个2*4*3的空间
y3d = zeros(2,4,3);
% 为每个通道赋值即可
y3d(:,:,1) = x;
y3d(:,:,2) = x;
y3d(:,:,3) = x;

% 使用repmat
x3d = repmat(x,[1 1 3])

repmat函数

repmat语法:B = repmat(A,m,n) 将矩阵 A 复制 m×n 块,就是将A作为一个整体,重复m行再重复n列。还有种看起来更规范的写法B = repmat(A,[m n])其实与 B = repmat(A,m,n) 的用法一致。
repmat(x,[1 1 n]):可以将x构建成n维的矩阵。但是仔细想一下,似乎“笨方法”也有可取之处呀,假如你要构建的矩阵每一维都要求是不同的,这时候似乎repmat就无能为力了。看起来也不是很笨嘛。

矩阵的拼接

好了,让我们回到主题矩阵拼接上。那假如我有一个x =[1 2;3 4]的矩阵,我想它变成 x_new = [1 1 2;1 3 4]要怎么实现呢?假如是x_new=[1 2;3 4;1 1]呢?先从简单的来说,假如有 x =[1 2]到x = [1 2 3],你一定知道,同理从x =[1;2]到x =[1;2;3]也很简单,这里我要说的是‘,’和‘;’的区别,‘,’是用来标志列的,即它的前后都是一列,而‘;’是用来标志行的,即在它前后都是独立的一行。用代码来示范下。

% 两列 1和2
x =[1,2]
% 加一列元素为3
x_new =[x,3];
% 两行 1和2
y =[1;2];
% 加一行元素为3
y_new =[y;3] 

好了理解了上面的行列标志,下面的代码其实也就能看懂了。实现一下上面的2维的拼接。

x =[1 2;3 4];
% 实现x_new = [1 1 2;1 3 4]
x_new =[ones(size(x,1),1),x];
% 实现x_new=[1 2;3 4;1 1]
x_new2 = [x;ones(size(x,2),1)'];

就写到这里吧,又快到中午了,看代码。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值