我有一个大小为A
的矩阵p x p
和一个向量y = [y1,y2,...,yn]
。
我想要做的是创建一个大小为p x p x n
的3维矩阵,也就是说,它包含n
个带,每个带的大小为p x p
。
如何创建每个乐队?:
每个波段等于矩阵A
乘以y
中的一个值。例如,第一个频段为A * y1
,第二个频段为A * y2
。另一方面,乐队编号i
,其中i = 1, ..., n
等于A * yi
嗯,这可以使用for循环轻松完成,但这在计算中非常简单且昂贵。如何防止使用for循环?有没有可以直接创建三维矩阵的快速自动方法?
任何帮助将非常感谢。
答案 0 :(得分:2)
您可以使用bsxfun
将p x p
矩阵乘以y
中的每个值。我们必须将y
重塑为1 x 1 x n
,以便乘法创建第三维。
out = bsxfun(@times, A, reshape(y, 1, 1, []));
如果您使用的是R2016b或更新版本(当MATLAB引入了隐式广播时),您只需将bsxfun
替换为.*
out = A .* reshape(y, 1, 1, []);