प्लेटफार्म: गणित

मेरे पास अलग-अलग जुड़े पथ (प्रक्षेपवक्र) से संबंधित x और y निर्देशांक की एक तालिका है:

{{ट्रैजेक्टरी, फ़्रेम, x, y}, {1, 0, 158.22, 11.519}, {1, 1, 159.132, 11.637}, ... {6649, 1439, 148.35, 316.144}}

तालिका प्रारूप में यह इस तरह दिखेगा:

Trajectory     Frame     x        y
------------------------------------------
1              0         158.22   11.519
1              1         159.13   11.637
1              2         158.507  11.68
1              3         157.971  11.436
1              4         158.435  11.366
1              5         158.626  11.576
2              0         141      12       remove this row, path too short!
2              1         143      15       remove this row, path too short!
2              2         144      16       remove this row, path too short!
2              3         147      18       remove this row, path too short!
3              0         120      400
3              1         121      401
3              2         121      396
3              3         122      394
3              4         121      392
3              5         120      390
3              6         124      388
3              7         125      379
...

मैं किसी भी तत्व/पंक्तियों को हटाना चाहता हूं जहां प्रक्षेपवक्र की कुल लंबाई "एन" फ्रेम/पंक्तियों/तत्वों से कम है (इस उदाहरण के लिए 5 फ्रेम)। सूची ~ 80k तत्व लंबी है, और मैं निर्दिष्ट सीमा के तहत प्रक्षेपवक्र वाली सभी पंक्तियों को हटाना चाहता हूं।

दिए गए उदाहरण के लिए, प्रक्षेपवक्र 2 केवल 4 फ्रेम में मौजूद है, इसलिए मैं प्रक्षेपवक्र 2 के लिए सभी पंक्तियों को हटाना चाहता हूं।

मैं गणित के लिए नया हूं और मुझे यह भी नहीं पता कि कहां से शुरू करना है। मैंने सोचा कि शायद एक ऐसी सूची तैयार कर रहा है जिसमें प्रक्षेपवक्र संख्याएं हों जिनमें Count[] थ्रेसहोल्ड से कम मूल्य हो, फिर सशर्त रूप से उस पैटर्न का पालन करने वाले किसी भी तत्व को DeleteCases[] के साथ समाप्त करना, लेकिन मैं सक्षम नहीं था मेरे सीमित वाक्यविन्यास ज्ञान को बहुत दूर तक प्राप्त करें।

मैं आपकी मदद की सराहना करता हूं और समाधान के लिए तत्पर हूं!

2
Taylor Minckley 12 जून 2020, 22:19

1 उत्तर

सबसे बढ़िया उत्तर
table = {{"Trajectory", "Frame", "x", "y"},
   {1, 0, 158.22, 11.519}, {1, 1, 159.13, 11.637},
   {1, 2, 158.507, 11.68}, {1, 3, 157.971, 11.436},
   {1, 4, 158.435, 11.366}, {1, 5, 158.626, 11.576},
   {2, 0, 141, 12}, {2, 1, 143, 15}, {2, 2, 144, 16},
   {2, 3, 147, 18}, {3, 0, 120, 400}, {3, 1, 121, 401},
   {3, 2, 121, 396}, {3, 3, 122, 394}, {3, 4, 121, 392},
   {3, 5, 120, 390}, {3, 6, 124, 388}, {3, 7, 125, 379}};

traj = First /@ Rest[table];
n = 5;
under = First /@ Select[Tally[traj], Last[#] < n &];
discard = Flatten[Position[table[[All, 1]], #] & /@ under];
newtable = Delete[table, List /@ discard]

या वैकल्पिक रूप से, अंतिम दो पंक्तियों के लिए, यह तेज़ हो सकता है

discard = Position[table[[All, 1]], _?(MemberQ[under, #] &)];
newtable = Delete[table, discard]
0
Chris Degnen 12 जून 2020, 19:52