【问题标题】:Can characters be used as indices?字符可以用作索引吗?
【发布时间】:2016-07-11 10:07:08
【问题描述】:

让我们定义,例如,

x = 10:10:2000;

众所周知,整数值可以用作索引:

>> x(9)
ans =
    90

在 Matlab 中,字符通常可以用在需要数字的地方,而 Matlab 会自动进行转换。比如'a'的ASCII码是97

>> 'a'+1
ans =
    98

字符也可以用作索引吗? Matlab 是否将它们转换为整数?

【问题讨论】:

    标签: arrays matlab matrix matrix-indexing


    【解决方案1】:

    它们可以使用...但如果索引是一个冒号,请小心!

    让我们定义

    >> x = 10:10:2000;
    

    使用'a' 进行索引会产生x 的第97 个元素,正如预期的那样:

    >> x('a')
    ans =
       970
    

    但是,使用 ':' 进行索引是一种特殊情况。字符串':' 充当: 索引,从而生成x 的所有值的列向量。即x(':')x(:)相同:

    >> x(':')
    ans =
              10
              20
              30
             ...
            1990
            2000
    

    这意味着索引':' 正在评估x(':') 的作用类似于x(:)),而用作索引的其他字符数组未评估x('a') 不像 x(a)):

    >> a = 1;
    >> x('a')
    ans =
       970
    

    这也意味着对于':',在索引之前转换为数字类型确实很重要,这与用作索引的其他字符不同:

    >> x(double('abc'))
    ans =
       970   980   990
    >> x('abc')
    ans =
       970   980   990
    
    >> x(double(':'))
    ans =
       580
    >> x(':')
    ans =
              10
              20
              30
             ...
            1990
            2000
    

    用作索引的':' 的“评估”行为是already known。令人惊讶的是与用作索引(未计算)的其他字符或字符数组的对比。

    为简单起见,示例使用了单维,但所描述的行为也适用于多维索引。在 Octave 中也观察到相同的行为。

    【讨论】:

    • 我不明白的一件事是:Octave 怎么知道要测试这个?:) subsref 在早期是开源的吗?
    • @AndrasDeak 好点!见this comment
    • 哦,非常时髦的帖子,并且还为这种奇怪的行为提供了正当理由。
    • @AndrasDeak 提到了':'(字符串)索引here用作索引的冒号被传递[...]作为冒号字符':'。使用冒号指定的范围(例如,2:5)扩展为 2 3 4 5
    • 所以它技术上不是无证的,仅用于所有意图和目的;)
    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 2017-10-28
    • 2017-10-29
    • 1970-01-01
    • 2013-03-12
    • 2016-11-27
    相关资源
    最近更新 更多