平台: Mathematica
我有一个属于单个连接路径(轨迹)的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
...我想删除轨迹总长度小于"n“帧/行/元素(本例中为5帧)的所有元素/行。该列表的长度约为80k个元素,我希望删除所有包含低于指定阈值的轨迹的行。
对于给定的示例,轨迹2仅存在于4个帧中,因此我希望删除轨迹2的所有行。
我是个数学新手,我甚至不知道从哪里开始。我想也许可以创建一个包含Count[]值小于阈值的轨迹编号的列表,然后使用DeleteCases[]之类的东西有条件地删除遵循该模式的任何元素,但由于我有限的语法知识,我不能走得很远。
感谢您的帮助,期待您的解决方案!
发布于 2020-06-13 03:45:20
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]https://stackoverflow.com/questions/62351060
复制相似问题