MATLAB:将每列1x3xN矩阵乘以相应的3x3xN旋转矩阵

时间:2013-12-10 01:48:47

标签: matlab matrix multidimensional-array matrix-multiplication

基本上我有一个像这样的旋转矩阵:

% rot    = [  cos(theta)    sin(theta)  0;
%            -sin(theta)    cos(theta)  0;
%            0              0           1];

除了theta是1xN,所以我创建了以下怪物:

rot = zeros(3,3,SIZE);
rot(1,1,:) = cos(theta);
rot(1,2,:) = sin(theta);
rot(2,1,:) = -sin(theta);
rot(2,2,:) = cos(theta);
rot(3,3,:) = ones(1,SIZE);

现在,我有一个1x3xN矩阵,我需要对每个1x3列向量进行右矩阵乘法,并沿着长度为N的维度使用相应的3x3旋转矩阵。

我有一些想法,这可能与bsxfun有关吗?但我没有成功搞清楚......

1 个答案:

答案 0 :(得分:3)

所以你有一个大小为R的矩阵= [3 3 N],你想要乘以1x3xN向量V(大概是一个theta对应于一页的V) 。这意味着您希望第二维上的总和。溶液

result = squeeze(sum(bsxfun(@times, R, V), 2));

第一个乘法元素(bsxfun负责沿着第一个维度的神奇扩展),然后求和第二个维度(矩阵乘法会做什么),然后squeeze出单个元素提供3xN结果的第二维。