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

>>

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

  1. 【 MATLAB 】通过案例学会编写一个 matlab 函数(小猫掉进山洞问题)

    这是关于matlab学习的第一篇博文,我是不愿意承认自己不会MATLAB的,因为这东西大一的时候就学过,如果白驹过隙,都不好意思说自己研几了,科研的过程中MATLAB是必须要会的,于是得系统的看一下了 ...

  2. 【Matlab】如何规范地编写一个MATLAB函数文件

    在matlab中,M文件分为脚本文件和函数文件.如果M文件的第一个可执行语句以function开头,那这个M文件就是函数文件.函数文件内定义的变量为局部变量,只在函数文件内部起作用,当函数文件执行完后 ...

  3. 将数学模型用matlab,matlab课件第3章_控制系统的数学模型及其转换.ppt

    matlab课件第3章_控制系统的数学模型及其转换 3.1.1 传递函数 传递函数输入举例 3.1.2 零极点增益形式 3)零极点增益模型: 3.1.3 部分分式形式 2.1.4 状态空间表达式 3. ...

  4. matlab访问脉冲传递函数的分母,笔记:系统模型转换

    示例:num=[73.22 39.26 165.7 ] den=[1 1.116 0.709 1.419] num = 0 -0.1933 0.5872 0.2336 den = 1.0000 -0. ...

  5. 【 MATLAB 】DFT性质讨论(一)线性、循环反转、共轭与实序列的对称性的MATLAB实现

    上篇博文通过在理论上讨论了DFT的三个性质:[ MATLAB ]DFT性质讨论(一)线性.循环反转与共轭 分别讨论: 一.线性 给出一个例子,给出x1和x2,x3 = 0.3*x1+0.8*x2; 之 ...

  6. 【 MATLAB 】序列的奇偶分解的 MATLAB 函数编写实践

    序列 x(n)的奇偶分解的公式为: 编写一个序列 x(n) 的奇偶分解式 xe(n) 和 xo(n),需要考虑的问题是序列长度,下标的变化. 这里必须做个声明,下面的程序中用到了前几篇博客中的几个函数 ...

  7. Fisher线性判别算法原理及实现 MATLAB

    Fisher线性判别算法原理及实现 MATLAB 一.Fisher判别器原理 二.代码实现 clc; close all; clear; %% 生成数据 rng(2020); %指定一个种子 mu1 ...

  8. 【转】Linux下c++调用自己编写的matlab函数:通过mcc动态链接库.so实现

    转自:Linux下c++调用自己编写的matlab函数:通过mcc动态链接库.so实现_Jaster_wisdom的专栏-CSDN博客 之前在这里和这里调用了matlab自带的一些函数,是通过matl ...

  9. matlab加速度转化为位移,加速度转换成位移的matlab代码及说明

    加速度转换成位移的matlab代码及说明 由测量的加速度离散数据数据转化成位移数据一般不直接在时域进行积分处理,而是由时域转换成频域在频域中进行二次积分再转化到时域中得到位移结果. 相关matlab处 ...

最新文章

  1. XML系列之--解析电文格式的XML(二)
  2. 世界杯直播“三分天下”,视频平台如何实现高清直播?
  3. sqlserver死锁解决的存储过程
  4. Android Gradle编译问题
  5. Go 语言成为最受欢迎的语言
  6. opencore0.6.3_Ubuntu 18.04 源码编译安装 PHP 7.3
  7. 临床外显子组测序分析中的那些坑(上)
  8. 数据类型的判断 c# 1614092544
  9. call() apply() bind()
  10. HBase EndPoint加载失败
  11. ping and traceroute(tracert)
  12. jquery实现页面提示,数据正在加载中
  13. DVWA教程实践之Brute Force
  14. 基于SSM框架和JSP的房屋租赁、合同签订系统
  15. 笔记本电脑建立Wifi热点多种方法
  16. 2021谷歌年度AI技术总结 | Jeff Dean执笔万字展望人工智能的5大未来趋势!
  17. java点歌系统_Java实现模拟KTV点歌系统
  18. 为什么LINUX不需要碎片整理(Why Linux Doesn’t Need Defragmenting)
  19. 华为AC6005基础调试步骤
  20. C语言操作符详解------移位操作符

热门文章

  1. 【React】1138- React Hooks 性能优化的正确姿势
  2. 【Linux_Kali网络渗透测试学习笔记总结(五)】社会工程学攻击
  3. SQL Server安装登录过程中配置管理器无法创建管理单元的解决方法
  4. redmine备份_Redmine数据库备份及搬家
  5. 高中生计算机奖状内容怎么写,学生会奖状内容怎么写
  6. 【读书笔记】《2030》阿尔伯特·布鲁克斯
  7. 计算机丢失cxplus.dll,pyinstaller打包cx_Oracle库问题处理记录
  8. 网络浏览器 Microsoft Edge 32/64 位 v79.0.309.7 绿色便携版
  9. 经典windows sdk 程序设计网站
  10. USB2.0 HUB芯片方案-GL850G