Matlab:用矩阵索引多维数组

时间:2015-01-13 01:16:12

标签: arrays matlab multidimensional-array indexing vectorization

我有一个名为 Spr 的三维矩阵,大小 5x5x500 。最后一个维度代表个体,而前两个维度代表状态。因此,对于每个人,我存储从状态i到状态j的5x5转移概率矩阵。例如,最后一个人的转换概率是:

Spr( : , : , 500)

ans =

0.1386    0.3768    0.2286    0.1871    0.0688
0.1456    0.3959    0.2401    0.1966    0.0218
0.1475    0.4011    0.2433    0.1992    0.0090
0.1486    0.4039    0.2450    0.2006    0.0020
     0    1.0000         0         0         0

我想访问三维矩阵Spr,第一个索引由500x1矩阵S提供,该矩阵存储特定个体当前所处的状态。因此,我的最终结果将是1x5x500矩阵。例如,如果第500个人当前处于状态S(i)= 2,则该个人的相应行将对应于:

Spr(S(i),:,i)

0.1456    0.3959    0.2401    0.1966    0.0218 

如果不使用循环,我怎么能这样做?

我尝试在Matlab中使用 sub2ind 函数,但它不起作用,因为它要求所有索引都是整数,基本上我的第二个索引是字符“:”

1 个答案:

答案 0 :(得分:1)

只是满足了#34;没有循环"要求:

N=sum(bsxfun(@times,permute(full(sparse(S,1:numel(S),1)),[1,3,2]),Spr),1)

诀窍是建立一个索引矩阵,使用times选择正确的内容。 这个解决方案没问题,但我不喜欢它,因为它比使用for循环这个更简单的解决方案更慢,内存效率更低:

N=nan(1,size(Spr,2),size(Spr,3))
for k=1:size(Spr,1)
    N(1,:,S==k)=Spr(k,:,S==k)
end