MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   将3D矩阵与2D矩阵相乘 (https://www.labfans.com/bbs/showthread.php?t=22913)

poster 2019-12-10 16:49

将3D矩阵与2D矩阵相乘
 
假设我有一个[B]AxBxC[/B]矩阵X和一个[B]BxD[/B]矩阵Y

是否有一种非循环方法,我可以通过该方法将每个[B]C[/B] [B]AxB[/B]矩阵乘以Y ?


回答:
您可以使用函数[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/num2cell.html"]NUM2CELL[/URL]将矩阵X分解为一个单元格数组,并使用[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cellfun.html"]CELLFUN[/URL]在单元格[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cellfun.html"]之间[/URL]进行操作,在[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cellfun.html"]一行中[/URL]完成此操作:

Z = cellfun(@(x) x*Y,num2cell(X,[1 2]),'UniformOutput',false); 结果Z是一个[B]1×C[/B]单元阵列,其中每个单元都包含一个[B]A×D[/B]矩阵。如果希望Z成为[B]A by D D by C[/B]矩阵,则可以使用[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cat.html"]CAT[/URL]函数:

Z = cat(3,Z{:});


[B]注意:[/B]我的旧解决方案使用[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/mat2cell.html"]MAT2CELL[/URL]而不是[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/num2cell.html"]NUM2CELL[/URL] ,它并不那么简洁:

[A,B,C] = size(X); Z = cellfun(@(x) x*Y,mat2cell(X,A,B,ones(1,C)),'UniformOutput',false);

[url=https://stackoverflow.com/questions/1745299]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 10:28

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.