MATLAB————用reshape()函数将矩阵转换为张量

1 致谢

感谢MathWorks的官方文档,

链接如下:

https://ww2.mathworks.cn/help/matlab/math/array-indexing.html

2 前言

今天在学习K-means算法~

在K-means算法每次迭代的过程中,需要计算样本点与质心之间的距离,并对该样本点进行分类,

作业中说“You can use a for-loop over the examples to compute this.”,但是我还是希望能通过矩阵化来实现,

以提高代码的计算效率,我们首先来看看数据涉及的几个维度:

那就是,样本点的数量,质心的数量,

因为每个样本点与质心都对应着一个距离,

然后样本点数据本身的维度为2,因为有X和Y两个坐标,

所以,综上所述,数据的维度有三维:样本点数量,质心数量和坐标数量。

由于数据具有三个维度,所以构成了三维张量,

而作业中给出的数据,(无论是样本点数据还是质心数据),都是坐标数据的二维矩阵,

所以我们需要把二维矩阵转换为张量数据,那么如何进行转换呢?

我们需要使用reshape()函数。

3 使用reshape()函数将矩阵转换为张量

这里我们以二维坐标数据为例,来阐述一下转换的过程,

首先我们来看看X的数据形式,

X              300x2 double,300*2的二维矩阵,每行记录了样本点的坐标数据

centroids      3x2 double,    3*2的二维矩阵,   每行记录了质心的坐标数据

因为需要转换为张量,我们对转换的目标张量做如下定义,

定义一个3D的张量,其大小为m*K*D,这里m指的是样本点的数量,K指的是需要分类的类别(也就是质心的数量),D指的是样本数据的维度,这里就是2,也就是是X和Y坐标构成的二维坐标;

可以想象得到,矩阵就类似于张量的一层,∴我们的想法是首先把矩阵复制到张量的层对应的位置上,然后再用repmat()函数将层进行复制扩充,从而形成张量;

将矩阵转换为张量的步骤如下:

  1. 使用reshape()函数将矩阵转换为张量的一层;
  2. 再使用repmat()函数将层进行复制,扩充形成张量。

这里将矩阵X扩充成张量的示例代码如下:

m  = size(X,1);
% 构造X对应的张量
Tensor_X = reshape(X,m,1,size(X,2));
Tensor_X = repmat(Tensor_X,1,K,1);

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值