为什么过滤 cellarray 中的某些行对 Octave 中的分配有不同的行为?

问题描述 投票:0回答:1

我试图在 Octave 中返回一个带字符串的过滤后的 cellarray,但我得到了一种我不理解的行为。

过滤几个行索引似乎有效,但是当它被分配给一个变量并由函数返回时它不起作用。

我不知道这种行为是否也发生在 Matlab 中。

为什么会这样?

    function result = testcellarray()                                                                             
                                                                                                                   
      mycell = {'foo1' 'foo2' 'foo3'; 'barbar1' 'barbar2' 'barbar3'; 'yuzz1' 'yuzz2' 'yuzz3'};              
      idx = [1; 3];                                                                                         
    
      % WANT TO RETURN THIS                                                                                 
      mycell{[1:3], 2}                                                                                      
    
      % BUT RESULT GETS SOMETHING DIFFERENT                                                                
      result = mycell{[1:3], 2}                                                                             
    
    end
    
    octave:221> testcellarray()
          ans = foo2
          ans = barbar2
          ans = yuzz2
          result = foo2
          ans = foo2

matlab octave
1个回答
3
投票

mycell{[1:3], 2}
返回三个值的逗号分隔列表。你可以看出,因为 Octave 在函数返回之前显示了三次
ans =

那么赋值基本等于

result = 'foo2', 'barbar2', 'yuzz2'

逗号可以分隔MATLAB语言中的语句,所以这一行有三个语句,只有第一条是赋值。

如果要返回元胞数组的子集,使用圆括号(圆括号)进行索引:

result = mycell([1:3], 2)

您还可以捕获大括号内的逗号分隔列表,以形成包含三个值的新元胞数组。这将是一个 1x3 元胞数组,而不是我们上面返回的 3x1 数组:

result = {mycell{[1:3], 2}}
© www.soinside.com 2019 - 2024. All rights reserved.