gpt4 book ai didi

wolfram-mathematica - 在 Mathematica 中舍入后匹配列表条目的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 17:39:15 29 4
gpt4 key购买 nike

我在 Mathematica 中有两个列表:

list1 = {{a1, b1, c1}, ... , {an, bn, cn}} 


list2 = {{d1, e1, f1}, ... , {dn, en, fn}}

这些列表包含数字结果,每个列表大致包含 50000 个三元组。每个三元组代表两个坐标和这些坐标处某些属性的数值。每个列表的长度不同,坐标范围也不完全相同。我的目的是关联每个列表中第三个属性的数值,因此我需要扫描列表并确定坐标匹配的属性。我的输出将类似于
list3 = {{ci, fj}, ... , {cl, fm}}

在哪里
{ai, bi}, ..., {al, bl}

将(大致)分别等于
{dj, ej}, ..., {dm, em}

“大致”我的意思是坐标将匹配一次四舍五入到某个所需的精度:
list1(2) = Round[{#[[1]], #[[2]], #[[3]]}, {1000, 500, 0.1}] & /@ list1(2)

所以在这个过程之后,我有两个列表,其中包含一些匹配的坐标。我的问题是如何执行识别它们并以最佳方式挑选属性对的操作?

6 元素列表的一个例子是
list1 = {{-1.16371*10^6, 548315., 14903.}, {-1.16371*10^6, 548322., 14903.9}, 
{-1.16371*10^6, 548330., 14904.2}, {-1.16371*10^6, 548337., 14904.8},
{-1.16371*10^6, 548345., 14905.5}, {-1.16371*10^6, 548352., 14911.5}}

最佳答案

你可能想使用这样的东西:

{Round[{#, #2}], #3} & @@@ Join[list1, list2];

% ~GatherBy~ First ~Select~ (Length@# > 1 &)

这将对四舍五入后具有匹配坐标的所有数据点进行分组。您可以对 Round 使用第二个参数。指定要舍入的分数。

这假设单个列表中没有重复的点。如果有,您将需要删除它们以获得有用的对。告诉我是否是这种情况,我会更新我的答案。

这是使用 Sow 的另一种方法和 Reap .同样的警告也适用。这两个示例都只是指导您如何实现功能的指南。
Reap[
Sow[#3, {Round[{#, #2}]}] & @@@ Join[list1, list2],
_,
List
][[2]] ~Cases~ {_, {_, __}}

要处理每个列表中的重复循环元素,您可以使用 RoundGatherBy每个列表如下。
newList1 = GatherBy[{Round[{#, #2}], #3} & @@@ list1, First][[All, 1]];

newList2 = GatherBy[{Round[{#, #2}], #3} & @@@ list2, First][[All, 1]];

然后继续:
newList1 ~Join~ newList2 ~GatherBy~ First ~Select~ (Length@# > 1 &)

关于wolfram-mathematica - 在 Mathematica 中舍入后匹配列表条目的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8153245/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com