基于零的索引在MATLAB中可用

smi*_*dha 18 matlab

C中n长度数组的索引是0:N-1.而在MATLAB中它是从1:N

现在,我对C风格的索引感觉更舒服.有没有办法告诉MATLAB,通过在我的MATLAB脚本中包含一些命令或其他什么来采用C风格的索引而不是传统的1:N索引?

ust*_*tun 10

不,我相信差异源于数学家从1开始计算的事实.(不是MATLAB更适合数学家,相反它更多地被工程师使用(与Mathematica或Maple相比,其符号处理更强大) )

如果你想基于零编码,但类似于MATLAB,请查看NumPy和SciPy,Python包.

另请参阅为什么编号应从0开始,一般基于零的索引与一个基于索引的注释,以及MATLAB索引问题,以便进行MATLAB特定的讨论.有关在Python中的讨论,请参阅https://plus.google.com/115212051037621986145/posts/YTUxbXYZyfi.

  • 我是一名数学家,我从0开始算数:(更严重的是,数学家习惯用t = 0,t = 1来索引时间......等等.Matlab用于数值分析(微分方程)和初始条件始终为0.例如y(0)=初始值. (6认同)
  • [*真正的数学家*](http://en.wikipedia.org/wiki/Ordinal_number)从0开始计算. (2认同)

gno*_*ice 9

可以通过为要更改索引方案的所有不同类型的对象(内置或用户定义)重载函数SUBSREFSUBSASGN来执行此类操作.在这个问题的回答中给出了一种重置内置类型方法的方法的例子.缺点?......

  • 这将是一项庞大而危险的事业.
  • 它会破坏所有依赖于基于索引的内置函数,这意味着你必须基本上重写大部分MATLAB.
  • 您可能希望从其他MATLAB用户使用的任何代码也必须重写,这些代码也依赖于基于单一的索引.

简而言之,改变内置类型处理索引的方式甚至不可行.然而,在MATLAB的OOP系统中使用子类化是另一种(尽管仍然有点危险)选项.例如,您可以创建一个double_zb继承自内置类的新double类:

classdef double_zb < double
   methods
      function obj = double_zb(data)
         if nargin == 0
            data = 0;
         end
         obj = obj@double(data); % initialize the base class portion
      end
   end
end
Run Code Online (Sandbox Code Playgroud)

然后,您可以double_zb使用SUBSREFSUBSASGN的专用实现进行扩展,这些实现采用从零开始的索引.但是,在代码中有效地使用double_zb对象而不是double对象可能需要您重新实现double对象的所有其他方法,或以某种方式实现转换器方法以使用double_zb具有double方法的对象.我甚至不确定这样做的所有细节,但我当然可以说这将是一个巨大的头痛.

我的终极建议......不要担心并学会热爱基于单一的索引.;)

  • 在阅读这篇文章时,JW歌德不能不再想"魔法师的学徒"了. (9认同)

job*_*obo 7

实际上,Matlab 可以使用从零开始的索引.它们用(不幸的是相当低的优先级并且相当模糊地记录)前缀运算符"1+"表示,即

一个(1+(0:米))

来源:http: //www.mathworks.com/matlabcentral/newsreader/view_thread/11510

我认为"1+"来自生活在一个基础世界的人:添加一个来制作一个基础的索引.

  • 这不是从零开始的索引.`1 +`只是向向量`(0:m)`中的所有条目添加标量值1,创建一个基于索引的索引`1:(m + 1)`,用于索引`a` . (9认同)
  • 是的,但是当你需要你的代码在视觉上匹配从零开始的公式时,这是一个微不足道但又有用的修复方法 (8认同)