基于零的索引在MATLAB中可用

时间:2010-11-21 19:38:51

标签: matlab

C中n长度数组的索引是0:N-1。而在MATLAB中则是1:N

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

5 个答案:

答案 0 :(得分:10)

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

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

另请参阅Why numbering should start at zero,了解基于零的与一般基于索引的注释,以及MATLAB indexing issue对于MATLAB特定讨论的注释。有关Python中的讨论,请参阅https://plus.google.com/115212051037621986145/posts/YTUxbXYZyfi

答案 1 :(得分:9)

可能通过为所有不同类型的对象(内置或用户定义)重载函数SUBSREFSUBSASGN来执行此类操作。想要改变索引方案。 my answerthis question中给出了一种重置内置类型方法的方法示例。缺点?...

  • 这将是一项庞大而危险的事业。
  • 它会破坏所有依赖于基于索引的内置函数,这意味着你必须基本上重写大部分MATLAB。
  • 您可能想要使用的任何代码from other MATLAB users也必须重写,这些代码也必须重写。

简而言之,改变内置类型处理索引的方式甚至不可行。然而,有另一个(虽然仍然有点危险)选项使用subclassing in MATLAB's OOP system。例如,您可以创建一个继承自内置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

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

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

答案 2 :(得分:7)

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

一个(1+(0:M))

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

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

答案 3 :(得分:3)

总之:不......

答案 4 :(得分:3)

我使用Matlab进行数学运算,并且我们使用“时间开始= 0”。我的解决方案是写一个函数:

time(x) = x + 1

例如,如果我有一个数组y = [0,1,2,3,4],分别表示时间0,1,2,3,4的y值。我可以这样做:

y(time(0))

产生正确的0结果。因此避免必须修改我的所有方程式。