使用向量作为矩阵的索引

Pau*_*aul 16 indexing matlab matrix

我正在编写一个MATLAB函数来将数据读出到一个n维数组(可变维度大小).我需要能够访问Matrix中的特定点(例如,写入或读取它),但我不知道要指定多少索引.

目前我有一个current_point向量迭代指定每个索引的max_points向量,以及一个指定数组大小的向量.所以,例如,如果我想要一个大小为1000×15×3的三维数组max_points = [1000 15 3],并且current_point迭代[1, 1, 1][1000, 15, 3]([1, 1, 1]- > [1000, 1, 1]- > [1, 2, 1]- > [1000, 2, 1]- > ...).我希望能够做的是current_point作为矩阵的索引,如下所示:

output_matrix(current_point) = val
Run Code Online (Sandbox Code Playgroud)

但显然output_matrix([1 2 3]) = val会有类似的东西outputmatrix(1:3) = 30.我不能只使用虚拟变量,因为有时矩阵需要3个索引,其他时间4,其他时间2等,所以我需要一个可变长度的矢量.是否有一种简单的方法可以将矢量用作索引中的点?

gno*_*ice 20

使用该函数sub2ind创建线性索引是此问题的典型解决方案,如此密切相关的问题所示.您也可以自己计算线性索引而不是调用sub2ind.

但是,您的案例可能比我链接的其他问题更简单.如果你只用你的向量索引单个current_point(即它只是你的n维矩阵中的下标的n元素向量),那么你可以使用一个简单的解决方案,你可以使用它转换current_point为下标的单元格数组.函数num2cell并使用它来创建以逗号分隔的索引列表.例如:

current_point = [1 2 3 ...];        % A 1-by-n array of subscripts
subCell = num2cell(current_point);  % A 1-by-n cell array of subscripts
output_matrix(subCell{:}) = val;    % Update the matrix point
Run Code Online (Sandbox Code Playgroud)

该操作subCell{:}创建了相当于键入的内容subCell{1}, subCell{2}, ...,这相当于键入current_point(1), current_point(2), ....


Pav*_*vel 10

我知道现在为时已晚,但对于任何会发现这个主题的人来说都是如此.对我有用的最简单的方法是使用:diag(A (x(:),y(:)) );

遗憾的是,只有当您需要从矩阵中获取值而不是更改值时,此方法才有效

  • 你能进一步解释一下,我不明白它,但看起来它可能是一个很好的简单解决方案 (2认同)