matlab之bsxfun与repmat

本文深入探讨了Matlab中bsxfun函数的原理与使用方法,详细解释了如何通过bsxfun实现矩阵的虚拟复制与相加操作。包括了基本概念、工作原理、实例演示及与repmat函数的区别对比,旨在帮助读者理解和掌握bsxfun的高效应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bsxfun

a = [1; 2; 3]; 
b = [2, 4, 6];
bsxfun(@plus,A,B)

ans =

     3     5     7
     4     6     8
     5     7     9

其实bsxfun的功能是这样的:

bsxfun的执行是这样的,如果a和b的大小相同,那么c=a+b. 但如果有某维不同,且a或b必须有一个在这一维的维数为1, 那么bsxfun就将少的这个虚拟的复制一些来使与多的维数一样。在我们这里,b的第一维只有1(只一行),所以bsxfun将b复制3次形成一个3×3的矩阵,同样也将a复制成3×3的矩阵。这个等价于c=repmat(a,1,3)+repmat(b,3,1)。

首先是第一维不同,并且b的行为1,因此,将b进行复制,变成

222444666

而对于a来说,其第二维和b的第二维不一样,并且a的第二维为1.因此将a扩展
123123123

相加后:
345567789

repmat

其实把,这个挺有意思的,就是将矩阵作为一个元素按照一定的方式排成一个新的矩阵。
比如:
B = repmat(A,m,n)
将矩阵 A 复制 m×n 块,即把 A 作为 B 的元素,B 由 m×n 个 A 平铺而成。B 的维数是 [size(A,1)*m, size(A,2)*n] 。
>> A = [1,2;3,4]

A =

1 2

3 4

>> B = repmat(A,2,3)

B =

1 2 1 2 1 2

3 4 3 4 3 4

1 2 1 2 1 2

3 4 3 4 3 4

区别

repmat是显式的复制,当然带来内存的消耗。而bsxfun是虚拟的复制,实际上通过for来实现,等效于

for(i=1:3)
    for(j=1:3)
    c(i,j)=a(i)+b(j);
    end
end

for(i=1:3),for(j=1:3),c(i,j)=a(i)+b(j);end,end。
但bsxfun不会有使用matlab的for所带来额外时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值