gpt4 book ai didi

matlab - 在单元格数组Matlab中乘以矩阵?

转载 作者:太空宇宙 更新时间:2023-11-03 19:36:01 24 4
gpt4 key购买 nike

我有一个名为 Acell(1, n) 元胞数组,每个单元格条目都包含一个 mxn 矩阵。因此,实际上,我的元胞数组包含 n 个大小为 mxn 的矩阵。

然后我有另一个名为 B 的元胞数组,其中存储了 n pxm 矩阵。

我需要做的是将两者相乘,如:A[1] * B[1], A[2] * B[2],...,A[n] * B[n]。然后我需要将结果存储为它们自己的单独矩阵,并将它们相加。

矩阵对于乘法是共形的,但是因为元胞数组 B 包含的行数少于元胞数组 A,当我使用 cellfun(@times A, B , 'UniformOutput', true) 我收到一个unequal matrices 错误。

这似乎表明 cellfun 只能在矩阵的行数和列数相等时将单个单元格相乘。

现在,我可以通过使用各种循环或通过调用 cell2matmat2cell 等来执行此操作。我也可以将所有内容都存储为矩阵数组而不是使用单元格...但是 - 我更愿意使用单元格。

所以 - 我的问题是:是否有仅使用 cellfun 的好方法?我已经尝试了参数输入的各种组合 - 但到目前为止没有运气。

最佳答案

要用 cellfun 做到这一点,只需定义您自己的匿名函数:

C = cellfun(@(a,b) a*b, A, B, 'UniformOutput', 0);

现在,正如您提出的问题,您不能将 A*B 相乘,因为内部维度不一致。相反,我用 B*A 对此进行了测试,其中维度一致:p=1、m=3、n=3。

A = {eye(3), rand(3), magic(3)};
B = {[1 2 3], [3 5 1], [7 8 8]};

C = cellfun(@(a,b) b*a, A, B, 'UniformOutput', 0);

Cmat = cat(3, C{:});
S = sum(Cmat, 3);

求和是通过在第三个维度上连接每个 C 数组然后对其求和来完成的。

关于matlab - 在单元格数组Matlab中乘以矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com