【问题标题】:Access Values of Cell Array deeply nested within Structure Array深度嵌套在结构数组中的元胞数组的访问值
【发布时间】:2020-04-15 16:24:08
【问题描述】:

我有一个嵌套的 structure_array/cell_array/structure_array 字符值,它是 Web 查询的结果,它返回一个转换后的 JSON 对象,我可以在循环中访问所需的数值:

for ix = 1 : size( S.orderBook.buckets , 2 )
 if ( str2double( S.orderBook.buckets{ ix }.price ) >= str2double( S.orderBook.price ) )
  mid_ix = ix ;  
  break ;
 endif
endfor

上述循环获取感兴趣区域中间的单元格的索引mid_ix,并且

orderbook_begin_ix = mid_ix - 20 ; orderbook_end_ix = mid_ix + 20 ;

jj = 0 ;
for ix = orderbook_begin_ix : orderbook_end_ix
 jj = jj + 1 ;
 new_orderbook_data( 1 , jj ) = str2double( S.orderBook.buckets{ ix }.longCountPercent ) ;
endfor

第二个循环用感兴趣的值填充预初始化的矩阵 new_orderbook_data。

但是,我想知道是否有更快/更优雅的方式来获取这些值?目前,如上所示,我必须运行包含“if 语句”的“查找”for 循环以获取所需数值的大致范围,然后在该区域中运行第二个 for 循环的球场以提取这些所需的值。

注意:交叉发帖Octave forum

【问题讨论】:

  • 以字符串形式存储的数字使它们难以处理。我建议先将它们转换为数字。完成后,您可以使用矢量化代码完成其余部分。

标签: data-structures octave cell-array


【解决方案1】:

我想我已经通过使用以下语法解决了这个问题:

prices = cellfun( @str2double , { [ S.orderBook.buckets{:} ].price } ) ;

这给了我一个矩阵“价格”,我可以进一步应用矢量化代码。

解释:-

  1. { : } 将元胞数组中的价格提取到逗号中 分隔列表,
  2. 封闭的 [ ] 将此列表放入结构数组中,

  3. [ ].price 仅提取价格,然后将其放回 具有最外层 { }

  4. 的元胞数组
  5. 然后通过应用 cellfun 到这个价格单元格数组和

  6. 最终分配给“价格”矩阵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2017-04-23
    • 2018-09-28
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    相关资源
    最近更新 更多