我有一个非固定的维矩阵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)