Значения доступа к массиву ячеек глубоко вложены в массив структур - PullRequest
1 голос
/ 15 апреля 2020

У меня есть вложенные struct_array / cell_array / structure_array символьных значений, которые являются результатом веб-запроса, который возвращает преобразованный объект JSON, необходимые числовые значения c, к которым я могу обращаться в циклах, таким образом :

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

Приведенный выше l oop получает индекс 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

в этот второй l oop заполняет предварительно инициализированную матрицу new_orderbook_data интересующими значениями.

Однако мне было интересно, существует ли более быстрый / более элегантный способ получения этих значений? На данный момент, как видно из приведенного выше, мне нужно выполнить «поиск» для l oop, который включает в себя «утверждение if», чтобы получить приблизительный номер требуемых чисел c, а затем выполнить второй для l oop в области приблизительного значения, чтобы извлечь эти требуемые значения.

Примечание: кросс опубликован на Октавском форуме

1 Ответ

0 голосов
/ 16 апреля 2020

Я думаю, что решил эту проблему, используя следующий синтаксис:

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

, который дает мне матрицу "цен", к которой я могу в дальнейшем применять векторизованный код.

Объяснение: -

  1. {:} извлекает цены из массива ячеек в список через запятую,
  2. заключающий [] помещает этот список в массив структуры,

  3. [] .price извлекает только цены, которые затем помещаются обратно в массив ячеек с внешней внешней оболочкой {}

  4. и затем строковыми значениями преобразуются в число c, применяя cellfun к этому массиву ячеек цен, и

  5. наконец присваиваются матрице "цен".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...