PDA

查看完整版本 : 5D数组哈希表


poster
2019-12-10, 16:49
我目前在名为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 (https://stackoverflow.com/questions/919353/5d-array-hash-table/919404#919404)所指出的),但使用内置函数SUB2IND (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/sub2ind.html) (如Loren (https://stackoverflow.com/questions/919353/5d-array-hash-table/920506#920506)所指出的) 将更简洁 (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/sub2ind.html) ,易于阅读。对于您的示例,您可以通过以下方式使用它:

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是每个维度的尺寸的数组。



更多&回答... (https://stackoverflow.com/questions/919353)