相关疑难解决方法(0)

未知维矩阵的索引

我有一个非固定的维矩阵M,我想从中获取单个元素.元素的索引包含在向量J.中.

例如:

M = rand(6,4,8,2);
J = [5 2 7 1];

output = M(5,2,7,1)
Run Code Online (Sandbox Code Playgroud)

这次M有4个维度,但事先并不知道.这取决于我正在编写的算法的设置.它也可能是这样

M = rand(6,4);
J = [3 1];

output = M(3,1)
Run Code Online (Sandbox Code Playgroud)

所以我不能简单地使用

output=M(J(1),J(2))
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用sub2ind,但这也需要它的变量逗号分隔..

@gnovice

这是有效的,但我打算从矩阵中使用这种元素提取M相当多.因此,如果我cellJ每次访问时都必须创建一个临时变量M,这不会极大地减慢计算速度吗?

我也可以写一个单独的函数

function x= getM(M,J)
    x=M(J(1),J(2));
    % M doesn't change in this function, so no mem copy needed = passed by reference
end
Run Code Online (Sandbox Code Playgroud)

并根据算法的不同配置进行调整.这当然是速度与灵活性的考虑因素,我没有将其纳入我的问题中.

但是:这仅仅是可用于获得元件,用于设置有没有其他的方法比实际使用的索引(并且优选线性索引).我仍然认为sub2ind是一个选项.我想要的最终结果是:

function idx = getLinearIdx(J, size_M)
    idx = ...
end
Run Code Online (Sandbox Code Playgroud)

结果:

function lin_idx = Lidx_ml( J, M )%#eml
%LIDX_ML …
Run Code Online (Sandbox Code Playgroud)

matlab multidimensional-array matrix-indexing

10
推荐指数
1
解决办法
3184
查看次数