matlab自带的线性索引转换下标函数必须指定下标个数,也就是数据的维度。这在实际应用中受到了限制。
(什么是线性索引,什么是下标,不再介绍,相信你如果搜到了本贴,必然知道这两个概念)
% 原函数:
% 原函数可以直接拷贝到matlab中,生成m函数使用。
% 重写一个由线性索引查找下标的函数,适合多维,输出数组代表下标
% matlab 自带输出结果必须指定下标个数,此处无需指定
function subarray = myind2sub(datasize, ind)
% input: datasize 数据尺寸
% ind 数据线性索引 整数
% output: subarray 数组形式的下标索引
% suozi 2016.05.17 HIT
% 379786867 buaasuozi@126.com
% ind 判断
if ind ~= fix(ind)
disp('输入的索引必须为整数')
return
end
subarray = zeros(size(datasize));
rest = ind;
i=length(datasize);
while i > 0
if i ~= 1
tmpdivide = rest/prod(datasize(1:i-1));
if tmpdivide == fix(tmpdivide) % 余数为0
subarray(i) = tmpdivide;
else
subarray(i) = floor(tmpdivide) + 1;