optimization - 给定 2 级元素的值,如何有条件地从嵌套列表的 1 级删除元素?
问题描述
平台:数学
我有一个属于各个连接路径(轨迹)的 x 和 y 坐标表:
{{Trajectory, Frame, 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 的所有行。
我是 Mathematica 的新手,我什至不知道从哪里开始。我想可能会创建一个列表,其中包含Count[]
值小于阈值的轨迹编号,然后有条件地消除任何遵循该模式的元素,例如DeleteCases[]
,但鉴于我有限的语法知识,我无法走得很远。
感谢您的帮助并期待解决方案!
解决方案
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]
推荐阅读
- javascript - Swiper JS:到达最后一张幻灯片后滚动过去的滑块
- python - 有没有办法在 Python 中对一组 2D 坐标进行 bin 处理
- c - 在C中,你可以在一个函数中修改一个全局变量,然后在同一个函数中使用修改后的值吗
- r - 给定R中的某些条件,如何计算数据框中的百分比,使用ifelse语句?
- c# - 如何在 Windows 中使用 C# 客户端创建具有静态 IP 的 docker 网络
- nunit - 当路径超过 255 时,TestContext.AddTestAttachment(string path) 未将文件附加到测试报告
- python-3.x - 使用 datetime 函数提取多个 URL
- jinja2 - 如何在 Jinja 变量中保留前导空格?
- python - 使用 pyshark 从 Pcap 文件中打印 tcp 有效负载
- javascript - 无法访问循环内变量的值