Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我目前在名为template的变量中将5D数组写入称为template1D的1D数组中,并具有3456(8 * 12 * 3 * 4 * 3)个条目的哈希表。在Matlab中,按以下方式访问多维数组:
template{idx_r, idx_l, idx_rho, idx_alpha, idx_beta} 但是,由于我的索引分别从0-7、0-11、0-2、0-3和0-2出发,因此我不确定要从中检索总索引号的最简单方法是什么这五个索引,以便正确获取模板数组中的正确片段。正确执行此类哈希函数的最简单方法是什么? 回答: 尽管您当然可以自己算术计算线性索引(如Tal所指出的),但使用内置函数SUB2IND (如Loren所指出的) 将更简洁 ,易于阅读。对于您的示例,您可以通过以下方式使用它: index = sub2ind([8 12 3 4 3], idx_r, idx_l, idx_rho, idx_alpha, idx_beta); 如果所有索引均基于0,则在将它们传递给SUB2IND之前,必须将每个索引加1。 编辑: 如果您想了解如何自己在MATLAB中正确地计算线性索引,以使它们与SUB2IND的结果一致,那么您将使用以下代码: index = (((idx_beta*4 + idx_alpha)*3 + idx_rho)*12 + idx_l)*8 + idx_r + 1; 注意 ,此方程式需要使用的索引必须基于0,而传递给SUB2IND的索引必须基于1。将该方程推广为任意数量的维度N : index = (...(idx(N)*sz(N-1) + idx(N-1))*sz(N-2) + ...)*sz(1) + idx(1) + 1; 或更简洁地: index = 1 + sum(idx.*cumsum([1 sz(1:(N-1))])); 其中idx是每个维度的基于0的索引值的数组,而sz是每个维度的尺寸的数组。 更多&回答... |
![]() |
![]() |