フィルターのクリア

table row key implementation

3 ビュー (過去 30 日間)
Andrew J
Andrew J 2019 年 12 月 3 日
コメント済み: Andrew J 2020 年 1 月 8 日
Does anyone know how the MatLab table 'RowKey' mechanism is implemented ?
I would expect something like this to be done using a tree structure internally - which then indirects into the backing data structure - so that sorting would be maintaned efficiently as the table grows - but I am seeing some strange behaviour which makes me question this.
If I create a tables - approx 250,000 rows - and use tbl.Properties.RowKeys to set unique keys - and then do a filter/sort operation on that table, like this:
tFinal1 = tInitial(MyRowKeys,:)
this takes a very long time, but if instead I do:
[~, idx] = ismember(MyRowKeys, tInitial.Properties.RowNames);
tFinal2 = tInitial(idx,:)
this is several orders of magnitude faster - so much so that the first version is unworkable.
It looks to me like one is o(n.log(n)) and the other is o(n squared) - or there is a very different element cmp operation.
Is there any documentation on how this works internally ?
A

採用された回答

Eric Sofen
Eric Sofen 2019 年 12 月 13 日
Hi Andrew,
I assume you mean t.Properties.RowNames throughout rather than "RowKeys." Yes, that's a large difference in performance to use ismember rather than named row subscripting when MyRowKeys is large. We are aware of some of the performance issues in named subscripting in tables and have been exploring ways to improve this performance. Thank you for illustrating this particular case. For now, you're best off using ismember() or maybe using containers.Map to create your own map between keys and indices.
  1 件のコメント
Andrew J
Andrew J 2020 年 1 月 8 日
thank you - that is the conclusion that I have come to also !
Regards,
A

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeTables についてさらに検索

タグ

製品


リリース

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by