Wolfram mathematica 在Mathematica中如何组合满足特定条件的列表
这可能是一个较低层次的问题,但我正在努力寻找一个合适的答案: 假设我有一个列表(或矩阵): 现在我想以这样一种方式组合这些列:具有相同第一个元素的列组合在一起,即Wolfram mathematica 在Mathematica中如何组合满足特定条件的列表,wolfram-mathematica,data-manipulation,Wolfram Mathematica,Data Manipulation,这可能是一个较低层次的问题,但我正在努力寻找一个合适的答案: 假设我有一个列表(或矩阵): 现在我想以这样一种方式组合这些列:具有相同第一个元素的列组合在一起,即 { {{1},{2}}, {{3,4,5},{6,7,8}} } 有没有快速实现这一点的方法?很抱歉,可能会造成混淆! 谢谢 这个怎么样: a = {{{1}, {1}, {1}, {2}, {2}, {2}}, {{3}, {4}, {5}, {6}, {7}, {8}}}; b = GatherBy[Transpos
{
{{1},{2}},
{{3,4,5},{6,7,8}}
}
有没有快速实现这一点的方法?很抱歉,可能会造成混淆!
谢谢 这个怎么样:
a = {{{1}, {1}, {1}, {2}, {2}, {2}},
{{3}, {4}, {5}, {6}, {7}, {8}}};
b = GatherBy[Transpose@a, First];
c = DeleteDuplicates@First@a;
d = Array[b[[#, All, 2, 1]] &, Length@c];
{c, d}
{{{1},{2},{{3,4,5},{6,7,8}
Chris Degnen已经给出了一个非常好的方法,但我想发表一些评论。它有助于以Mathematica函数最方便操作的格式保存数据,通常是行而不是列。这就是他在回答中使用
转置的原因
编辑:我想我误解了您的输出所代表的内容。我相应地改写了我的答案
使用GatherBy
,如Chris所做的:
a = {{{1}, {1}, {1}, {2}, {2}, {2}}, {{3}, {4}, {5}, {6}, {7}, {8}}};
{#[[All, 1, 1]], #[[All, All, 2, 1]]} & @ GatherBy[a\[Transpose], First]
或者使用播种
和收获:
Reap[MapThread[Sow[#2, #] &, a], _, {{#}, Join @@ #2} &][[2]]\[Transpose]
这里MapThread
取代了初始的Transpose
+1,但我相信您不需要数组
;你可以使用d=b[[;;Length@c,全部,2,1]]
。
{{{1}, {2}}, {{3, 4, 5}, {6, 7, 8}}}
Reap[MapThread[Sow[#2, #] &, a], _, {{#}, Join @@ #2} &][[2]]\[Transpose]
{{{1}, {2}}, {{3, 4, 5}, {6, 7, 8}}}