【问题标题】:Function to avoid 'Index exceeds matrix dimensions'避免“索引超出矩阵尺寸”的功能
【发布时间】:2014-10-07 22:47:23
【问题描述】:

我对 MATLAB 有疑问 - 或者至少我目前无法解决它,如果我处理该特定错误消息,我会得到非常复杂的示例。综合来看,我的问题如下:

我必须编写棋盘游戏。游戏字段以这种方式用零初始化:

    Field = zeros([6 7]);

稍后,我必须检查获胜条件。但是,如果我做类似的事情

    if GameField(7, 7) == xxx

那么它显然失败了,因为游戏字段只有六列。确切的错误消息是“索引超出矩阵维度” - 我完全可以理解这是为什么。

是否有任何函数可以帮助我避免该错误(以编程语言中的 try-catch 的方式)。例如,我知道有一个名为exists 的函数,但这仅适用于变量等 - 但不适用于矩阵维度。在处理对角线值时,使用length()-函数会非常棘手。我实际上正在寻找一个功能(我不知道它的名字),它的工作原理如下

    if valueExists(GameField(7, 7))
      %do something
    else
      %do something other
    end

【问题讨论】:

标签: arrays matlab


【解决方案1】:

您知道字段的大小,将其存储在名为 fieldSize 的变量中。

fieldSize = [6 7];

因此,您可以方便地将字段初始化为

Field = zeros(fieldSize);

接下来,当你要进行检查时,例如当前位置右下角的值是否为1,你总是可以先检查fieldSize

currentPosition = [1 7];
bottomRight = currentPosition - [1 1];
if any(bottomRight < 1 | bottomRight > fieldSize)
   % do not check b/c out of field
else
   % perform check
end

或者,您可以优化您的搜索策略,以便您从一开始就永远不会向外看。例如,从左下角到右上角的四对角线永远不能从 5:7 列开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多