【问题标题】:Matlab: how to redefine indexing to begin from zero? `Subscript indices must either be real positive integers or logicals.` [closed]Matlab:如何重新定义索引以从零开始? `下标索引必须是真正的正整数或逻辑。` [关闭]
【发布时间】:2013-12-05 02:19:40
【问题描述】:

我有一个数学数据,让索引从零开始会非常方便

a=sparse([],[],[],30,1);
>> a(0)=someValueHere
Subscript indices must either be real positive integers or logicals.

但默认情况下,Matlab 仅提供从 1 开始的索引。是否有一些简单的技巧或技巧,我仍然可以分配 a(0),这样我就不需要为该值创建一个 dummyVar a0 或在末尾追加值?

那么如何在Matlab中得到a(0)这样的赋值呢?每次调用 zero-index 时都会捕获错误并返回 someValueHere 而不是警告?

【问题讨论】:

  • 请解释下投票 - 必须有一些黑客才能让它工作。我认为没有理由不这样做:抓住错误并重新定义分配。
  • 非常有趣。 a(i+1)?
  • 这就像询问如何在 C 中重新定义索引以从 42 开始...我投票关闭。
  • 一点也不。使用a(i+1) 现在i 可以从0 开始。我不知道您可能正在寻找什么其他解决方案。也许编写一个 mex 函数来使用 C 的 0 索引?我不确定你是否解释了你的问题,这当然可以使用 Matlab 的索引来解决。

标签: matlab error-handling indexing bigdata readability


【解决方案1】:

有一个关于matlab索引问题的讨论:http://www.mathworks.cn/matlabcentral/newsreader/view_thread/285566

也许你可以写一个类似的函数

function t=C_index(x)
  t = x + 1;

然后您可以编写类似 y(C_index(0)) 的内容来获取向量 y 中的第一个值。

此外,

t=@(x) x+1
y(t(0)) 

应该可以。

【讨论】:

  • 您也可以使用匿名函数来执行此操作。请参阅我对您的答案的编辑。
  • @natan 谢谢你的提醒,我正要更新:)
  • 这需要将所有索引内容更改为t(...),我仍然发现更容易捕捉警告,然后将a(0) 存储到某个东西,以便用户可以像a(0) 一样使用它.这是最好用某个类或其他东西创建的吗?
  • @hhh:随着您的策略迭代和矢量化将一团糟。
  • @hhh 我同意 Daniel R.
【解决方案2】:

要让 MATLAB 的索引从 0 开始,您需要创建大量对象类来模拟常规数值类,但与 subsassgn()subsref() 等函数的行为不同。

也许有人疯狂到在某个地方做这件事,我预计这需要几周到几个月的工作才能真正正常工作。

【讨论】:

    猜你喜欢
    • 2016-06-12
    • 2016-02-16
    • 2014-09-11
    • 2021-07-02
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2013-12-04
    相关资源
    最近更新 更多