我有一个嵌套的字符值structure_array/cell_array/structure_aarray,它是返回转换后的JSON对象的web查询的结果,我可以在循环中访问所需的数值,因此:
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
第二个循环用感兴趣的值填充预初始化的矩阵neworderbookdata。
然而,我想知道是否有一种更快/更优雅的方式来获得这些值?目前,正如上面所看到的,我必须运行一个"查找"for循环,该循环包含一个"if语句",以获得所需数值的近似值,然后在近似值的区域运行第二个for循环,以提取这些所需值。
注:交叉张贴在Octave论坛
我想我已经通过使用以下语法解决了这个问题:
prices = cellfun( @str2double , { [ S.orderBook.buckets{:} ].price } ) ;
这给了我一个矩阵"价格",我可以进一步应用矢量化代码。
说明:-
- {:}将单元格数组中的价格提取为逗号分离列表
封闭的[]将此列表放入一个结构数组中
[].price只提取价格,然后将其放回具有最外层封闭{}的单元阵列
然后通过应用cellfun对此定价cell阵列和
最终分配给"价格"矩阵。