matlab实现repelem和repmat函数功能

创建一个函数repEleMat,实现repelem() 和repmat()功能

首先我们来了解repelem函数和repmat函数的定义
此处引用网上资料 —> https://zhuanlan.zhihu.com/p/142365105

matlab官方文档对repelem()repmat()亦有定义。

repelem()函数

B = repelem(A,r1,…,rN) 将 A 中的每个元素依 r1,…,rN 进行重复,返回一个数组。
r1,…,rN 中的每个元素必须是一个标量,或是与 A 在对应维度具有相同长度的向量。

例如,如果 A 是一个矩阵,repelem(A,2,3) 则返回一个矩阵,其中包含 A 中每个元素的一个 2×3 块。

repelem()函数示例:

在这里插入图片描述

repmat()函数

B = repmat(A,r1,…,rN) 指定一个标量列表 r1,…,rN,这些标量用于描述 A 的副本在每个维度中如何排列。当 A 具有 N 维时,B 的大小为 size(A).*[r1…rN]。例如:repmat([1 2; 3 4],2,3) 返回一个 4×6 的矩阵。

repmat()函数示例:

在这里插入图片描述

CS专业的一道题目

在这里插入图片描述

matlab代码实现

%% Created by cheunghonghui on 2020.06.26

%% matlab实现
mat = [1 2;3 4];
[out1,out2] = repEleMat(mat,2,2)

function [out1,out2] = repEleMat(mat,r,c)
[m n] = size(mat); %统计mat的规格
%对 mat中的每一个元素进行复制,复制规格由repEleMat输入的r,c控制
%程序设计思路,对输入的mat进行分析,先通过临时变量temp将mat中的各元素进行复制,
%然后将各个temp按照mat的排列循序赋值给out1
for i = 1:m
    for j = 1:n
        temp(r*(i-1)+1:r*i,c*(j-1)+1:c*j) = mat(i,j);
    end
end
out1 = temp;

%同理设计repmat函数功能
for i = 1:r
    for j =1:c
        temp((i-1)*m+1:i*m,(j-1)*n+1:j*n) = mat;
    end
end
out2 = temp;
end

输出结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42914989/article/details/106969238