自己编写的 matlab 线性索引转换下标 函数

来源:互联网 发布:php 处理图片 编辑:程序博客网 时间:2024/06/01 08:32

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('输入的索引必须为整数')    returnendsubarray = 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;        end        tmprest = rest - (subarray(i) - 1)*prod(datasize(1:i-1));        if tmprest ~= 0            rest = tmprest;            % else   rest = rest;        end    else        subarray(i) = rest;    end    i = i - 1;endend

如果函数有漏洞或错误,请指正。


示例:

example1:

>> A = rand(5,5)


A =


    0.8147    0.0975    0.1576    0.1419    0.6557
    0.9058    0.2785    0.9706    0.4218    0.0357
    0.1270    0.5469    0.9572    0.9157    0.8491
    0.9134    0.9575    0.4854    0.7922    0.9340
    0.6324    0.9649    0.8003    0.9595    0.6787


>> subarray = myind2sub(size(A), 10)


subarray =


     5     2


example2:
>> A = rand(3,4,2)


A(:,:,1) =


    0.7577    0.6555    0.0318    0.0971
    0.7431    0.1712    0.2769    0.8235
    0.3922    0.7060    0.0462    0.6948




A(:,:,2) =


    0.3171    0.4387    0.7952    0.4456
    0.9502    0.3816    0.1869    0.6463
    0.0344    0.7655    0.4898    0.7094


>> subarray = myind2sub(size(A), 10)


subarray =


     1     4     1


>> 


0 0
原创粉丝点击