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.
您可以通过为要更改索引方案的所有不同类型的对象(内置或用户定义)重载函数SUBSREF和SUBSASGN来执行此类操作.在我对这个问题的回答中给出了一种重置内置类型方法的方法的例子.缺点?......
简而言之,改变内置类型处理索引的方式甚至不可行.然而,在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使用SUBSREF和SUBSASGN的专用实现进行扩展,这些实现采用从零开始的索引.但是,在代码中有效地使用double_zb对象而不是double对象可能需要您重新实现double对象的所有其他方法,或以某种方式实现转换器方法以使用double_zb具有double方法的对象.我甚至不确定这样做的所有细节,但我当然可以说这将是一个巨大的头痛.
我的终极建议......不要担心并学会热爱基于单一的索引.;)
实际上,Matlab 可以使用从零开始的索引.它们用(不幸的是相当低的优先级并且相当模糊地记录)前缀运算符"1+"表示,即
一个(1+(0:米))
来源:http: //www.mathworks.com/matlabcentral/newsreader/view_thread/11510
我认为"1+"来自生活在一个基础世界的人:添加一个来制作一个基础的索引.