我确信这有一个简单的答案,但我不确定要搜索什么。我有一个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
但它真的很难看,我不得不想象有一种更简单,更不笨拙的方式。谢谢!
答案 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));