在向量中找到每个相邻数字对的矩阵入口并乘以

时间:2013-12-11 10:20:09

标签: matlab

我有一个由(P=[0.75,0.25;0.25,0.75]矩阵定义的(过渡)函数,我有一个向量说X=[1,2,1]然后我想找到P(1,2)*P(2,1)。如何概括这是最简单的方法?我尝试使用每列的功能创建P(i,j)然后X_temp=[X(1:end-1);X(2:end)]的函数句柄,最后使用产品函数,但它似乎比它必须更全面。

我想使用的X是1000维,P是3x3,我必须重复很多次,所以速度我觉得很重要。

1 个答案:

答案 0 :(得分:2)

您可以使用sub2ind获取相关的P值:

Ps = P(sub2ind(size(P), X(1:end-1), X(2:end)))

现在只需将它们相乘:

prod(Ps)

编辑:

对于函数句柄,你有正确的想法,只需确保你自己处理向量。例如,假设您的函数f(i,j)= i + j,我将假设它实际上是f(x) = x(1) + x(2),但我希望它能同时处理多个x {{1} }:

f(x) = x(:,1) + x(:,2)

OR

f = @(x)(x(:,1) + x(:,2))
f([X(1:end-1)', X(2:end)'])

请注意,您需要使用元素明智的运算符,例如f = @(ii, jj)(ii + jj) f(X(1:end-1)', X(2:end)') %//You don't actually need the transposes here anymore .*./等,而不是.^*,{{1 }} ...