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

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;

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;

end

end

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

示例:

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

>>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值