Matlab中的可变长度数组寻址

时间:2011-03-24 04:23:41

标签: matlab

我确信这有一个简单的答案,但我不确定要搜索什么。我有一个D维数组M,其中D被约束为1 <= D <= 5,并且长度为D,X的向量。我想用D作为M内的地址并增加该地址的值,所以如果D是[1 2 3],我想增加M(1,2,3)。我知道我可以这样做:

if D == 1
  M(X(1)) = M(X(1)) + 1;
end

if D == 2
  M(X(1), X(2)) = M(X(1), X(2)) + 1;
end

但它真的很难看,我不得不想象有一种更简单,更不笨拙的方式。谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用函数sub2ind将地址向量D转换为M中的相应维度。但是,这需要您将D存储为单元格而不是矢量。以下示例应该有所帮助。

A=magic(5);%# just a test matrix

A=
17    24     1     8    15
23     5     7    14    16
 4     6    13    20    22
10    12    19    21     3
11    18    25     2     9

d={3,4};%we need the element at row 3, column 4
indx=sub2ind(size(A),d{:});%# get the index corresponding to the subscript 3,4

A(indx)

ans=
20

您也可以直接将其作为A索引到矩阵A(sub2ind(size(A),d{:}))中,而无需创建单独的变量。

您还可以使用num2cell将矢量转换为单元格。这可能是一个更好的选择,因为您可能希望将D存储为矢量用于其他目的。所以相应的行变为

indx=sub2ind(size(A),num2cell(d));