在Matlab中创建和处理三维矩阵
||
我极力尝试在Matlab中避免
for
循环,但是我不知道该怎么做。情况如下:
我有两个m x n
矩阵A
和B
,以及两个向量two4 vector和w
,长度length6ѭ。我想对A
和v
进行外部乘积,以便得到一个m x n x d
矩阵,其中ѭ10is条目为A_(i,j) * v_k
,类似地对于B
和w
。
之后,我想添加结果m x n x d
矩阵,然后沿最后一个维度取mean
来获得m x n
矩阵。
我很确定我可以处理后一部分,但是第一部分使我完全陷入困境。我试着用bsxfun
无济于事。有人知道这样做的有效方法吗?非常感谢!
编辑:此修订版是在以下三个重要答案之后提出的。毫无疑问,gnovice对我提出的问题有最佳答案。但是,我要问的问题是在取均值之前对每个项求平方。我最初忘记提及这部分。考虑到这种烦恼,其他两个答案都可以很好地工作,但是这次在编码之前做代数的聪明技巧并没有帮助。谢谢大家的帮助!
没有找到相关结果
已邀请:
4 个回复
辩谷变充
如果矩阵和向量很大,则与使用BSXFUN或REPMAT的解决方案相比,由于所需的内存减少,因此该解决方案将为您提供更好的性能。 说明: 假设
是在沿第三维测量均值之前得到的m×n×d矩阵,则沿三维的跨度将包含以下内容:
换句话说,向量
缩放为
加上向量
缩放为
。这是在应用按元素平方时得到的结果:
现在,当您对第三个维度取平均值时,每个元素
的结果将如下:
骂陋冠
和
重塑为
:
在这里,我在
的参数中使用
来告诉它根据所有其他维数与向量中元素总数的乘积来填充该维数。
稼悸
将矩阵平铺在第三维中。
等等
痰降锭骂奸
等人求助于任何显式循环或间接循环。您更新的要求。您可以通过以下简单的矢量化解决方案来实现所需的目标
由于OP仅表示
和
是长度为
的向量,因此上述解决方案应适用于行向量和列向量。如果已知它们是列向量,则可以将
替换为
,并同样替换
。 您可以按照以下步骤检查它是否与Lambdageek的答案相符(修改为使术语平方)