derwille 发表于 2012-10-5 23:23:13

提取一组数,提出的数内部顺序不能变化,有没有更快的方

还是给个例子,我有一组数A = {{1, 2, 3, 4, 5, 6, 7, 8}, {2, 3, 7, 6, 9, 10, 11, 12}}得到
A1 = {{#[], #[], #[], #[]}, {#[], #[], #[], #[[
      5]]}, {#[], #[], #[], #[]}, {#[], #[], #[[
      5]], #[]}, {#[], #[], #[], #[]}, {#[], #[[
      3]], #[], #[]}} & /@ A
就得到A1 = {{{1, 2, 3, 4}, {1, 2, 6, 5}, {1, 4, 8, 5}, {7, 8, 5, 6}, {7, 6,
    2, 3}, {7, 3, 4, 8}}, {{2, 3, 7, 6}, {2, 3, 10, 9}, {2, 6, 12,
    9}, {11, 12, 9, 10}, {11, 10, 3, 7}, {11, 7, 6, 12}}}。现在我要提取里面只出现过一次的数组,比如A1里面{{{1, 2, 3, 4}, {1, 2, 6, 5}, {1, 4, 8, 5}, {7, 8, 5, 6},{7, 3, 4, 8}}, {2, 3, 10, 9}, {2, 6, 12,
    9}, {11, 12, 9, 10}, {11, 10, 3, 7}, {11, 7, 6, 12}}}是只出现过一次的,也就是里面{7, 6,
    2, 3}和{2, 3, 7, 6}算是重复出现,里面的顺序随便怎么排都可以,我所需要的就是{{1, 2, 3, 4}, {1, 2, 6, 5}, {1, 4, 8, 5}, {7, 8, 5, 6},{7, 3, 4, 8}, {2, 3, 10, 9}, {2, 6, 12,
    9}, {11, 12, 9, 10}, {11, 10, 3, 7}, {11, 7, 6, 12}}这组数,里面的数都是只出现过一次,而且提取出来的数最内部顺序不能变化,也就是说不能提出这样的数来{{{1, 2, 3, 4}, {1, 2, 5, 6}, {1, 4, 5, 8}, {3, 4, 7, 8}, {5, 6, 7,
   8}}, {{2, 3, 9, 10}, {2, 6, 9, 12}, {3, 7, 10, 11}, {6, 7, 11,
   12}, {9, 10, 11, 12}}}把内部的每组数据顺序从小到大排出来就不行了。
我编了一程序,但是效率太低,不知哪位高手能否编出效率更高的程序来
Clear["Global`*"]
A = {{1, 2, 3, 4, 5, 6, 7, 8}, {2, 3, 7, 6, 9, 10, 11, 12}};
f := (liu1 = {{#[], #[], #[], #[]}, {#[], #[[
      2]], #[], #[]}, {#[], #[], #[], #[]}, {#[[
      7]], #[], #[], #[]}, {#[], #[], #[], #[[
      3]]}, {#[], #[], #[], #[]}} & /@ A;
ac = Flatten;
c = Map;
f = Reap@
    Do]]] == 1, Sow], {i, 1,
      Length}];
dd = f[];
El = {};
Do]]]], {i, 1, Length}]; El)
f

derwille 发表于 2012-10-5 23:49:27

我这里有组数,算了558秒,太慢了,各位如有更快的算法可以对比一下

gotit 发表于 2012-10-6 10:40:28

本帖最后由 gotit 于 2012-10-6 21:37 编辑

data = Flatten[{{#[], #[], #[], #[]}, {#[], #[], #[[
      6]], #[]}, {#[], #[], #[], #[]}, {#[], #[[
      8]], #[], #[]}, {#[], #[], #[], #[]}, {#[[
      7]], #[], #[], #[]}} & /@ A, 1];
First /@ Select == Sort[#2] &], Last@# == 1 &]

用楼上数据计算,时间可以忽略不计.


chyanog 发表于 2012-10-6 11:36:03


A1=Extract[#, List /@ IntegerDigits /@ {1234, 1265, 1485, 7856, 7623, 7348}] & /@ A

A1可以这样简化的


derwille 发表于 2012-10-6 20:23:12

gotit 发表于 2012-10-6 10:40 static/image/common/back.gif
data = Flatten[{{#[], #[], #[], #[]}, {#[], #[], #[[
      6]], #[]}, {#[] ...

高手啊,果真的是忽略不计啊,非常感谢!

derwille 发表于 2012-10-6 20:40:30

chyanog 发表于 2012-10-6 11:36 static/image/common/back.gif
A1=Extract[#, List /@ IntegerDigits /@ {1234, 1265, 1485, 7856, 7623, 7348}] & /@ A

A1可以这样简化 ...

谢谢,不过我这里报错啊,不知哪里出了问题
A = {{1, 2, 3, 4, 5, 6, 7, 8}, {2, 3, 7, 6, 9, 10, 11, 12}};
A1 = Extract[#,
    List /@ IntegerDigits /@ {1234, 1265, 1485, 7856, 7623, 7348}] & /@
   A
出现
Extract::psl: "\!\(\*
StyleBox[\"\\\"Position specification \\\"\", \"MT\"]\)\!\(\* StyleBox[ RowBox[{\"{\",RowBox[{ RowBox[{\"{\",RowBox[{\"{\",RowBox[{\"1\", \",\", \"2\", \",\", \"3\", \",\", \"4\"}], \"}\"}], \"}\"}], \",\",RowBox[{\"{\",RowBox[{\"{\",RowBox[{\"1\", \",\", \"2\", \",\", \"6\", \",\", \"5\"}], \"}\"}], \"}\"}], \",\",RowBox[{\"{\",RowBox[{\"{\",RowBox[{\"1\", \",\", \"4\", \",\", \"8\", \",\", \"5\"}], \"}\"}], \"}\"}], \",\",RowBox[{\"{\",RowBox[{\"{\",RowBox[{\"7\", \",\", \"8\", \",\", \"5\", \",\", \"6\"}], \"}\"}], \"}\"}], \",\",RowBox[{\"{\",RowBox[{\"{\",RowBox[{\"7\", \",\", \"6\", \",\", \"2\", \",\", \"3\"}], \"}\"}], \"}\"}], \",\",RowBox[{\"{\",RowBox[{\"{\",RowBox[{\"7\", \",\", \"3\", \",\", \"4\", \",\", \"8\"}], \"}\"}], \"}\"}]}], \"}\"}], \"MT\"]\)\!\(\* StyleBox[\"\\\" in \\\"\", \"MT\"]\)\!\(\* StyleBox[ RowBox[{\"Extract\", \"[\",RowBox[{ RowBox[{\"{\",RowBox[{\"1\", \",\", \"2\", \",\", \"3\", \",\", \"4\", \",\", \"5\", \",\", \"6\", \",\", \"7\", \",\", \"8\"}], \"}\"}], \",\",RowBox[{\"{\",RowBox[{ RowBox[{\"{\",RowBox[{\"{\",RowBox[{\"1\", \",\", \"2\", \",\", \"3\", \",\", \"4\"}], \"}\"}], \"}\"}], \",\",RowBox[{\"{\",RowBox[{\"{\",RowBox[{\"1\", \",\", \"2\", \",\", \"6\", \",\", \"5\"}], \"}\"}], \"}\"}], \",\",RowBox[{\"{\",RowBox[{\"{\",RowBox[{\"1\", \",\", \"4\", \",\", \"8\", \",\", \"5\"}], \"}\"}], \"}\"}], \",\",RowBox[{\"{\",RowBox[{\"{\",RowBox[{\"7\", \",\", \"8\", \",\", \"5\", \",\", \"6\"}], \"}\"}], \"}\"}], \",\",RowBox[{\"{\",RowBox[{\"{\",RowBox[{\"7\", \",\", \"6\", \",\", \"2\", \",\", \"3\"}], \"}\"}], \"}\"}], \",\",RowBox[{\"{\",RowBox[{\"{\",RowBox[{\"7\", \",\", \"3\", \",\", \"4\", \",\", \"8\"}], \"}\"}], \"}\"}]}], \"}\"}]}], \"]\"}], \"MT\"]\)\!\(\* StyleBox[\"\\\" is not an integer or a list of integers.\\\"\", \"MT\"]\) "

chyanog 发表于 2012-10-6 22:10:29

derwille 发表于 2012-10-6 20:40 static/image/common/back.gif
谢谢,不过我这里报错啊,不知哪里出了问题
A = {{1, 2, 3, 4, 5, 6, 7, 8}, {2, 3, 7, 6, 9, 10, 11, 12 ...

我这里是没有问题的,你再 Clear 一下试试

derwille 发表于 2012-10-7 20:28:21

有没有其他人帮忙试一下如下代码看看
A = {{1, 2, 3, 4, 5, 6, 7, 8}, {2, 3, 7, 6, 9, 10, 11, 12}};
A1 = Extract[#,
    List /@ IntegerDigits /@ {1234, 1265, 1485, 7856, 7623, 7348}] & /@
   A
报错啊,总是出现这样的值,
{Extract[{1, 2, 3, 4, 5, 6, 7,
   8}, {{{1, 2, 3, 4}}, {{1, 2, 6, 5}}, {{1, 4, 8, 5}}, {{7, 8, 5,
   6}}, {{7, 6, 2, 3}}, {{7, 3, 4, 8}}}],
Extract[{2, 3, 7, 6, 9, 10, 11,
   12}, {{{1, 2, 3, 4}}, {{1, 2, 6, 5}}, {{1, 4, 8, 5}}, {{7, 8, 5,
   6}}, {{7, 6, 2, 3}}, {{7, 3, 4, 8}}}]}
不知何故

chyanog 发表于 2012-10-7 23:53:16

derwille 发表于 2012-10-7 20:28 static/image/common/back.gif
有没有其他人帮忙试一下如下代码看看
A = {{1, 2, 3, 4, 5, 6, 7, 8}, {2, 3, 7, 6, 9, 10, 11, 12}};
A1 = ...

你的Mathematica是哪个版本呢?

derwille 发表于 2012-10-8 00:19:38

chyanog 发表于 2012-10-7 23:53 static/image/common/back.gif
你的Mathematica是哪个版本呢?

7.0啊,应该不会是这个问题吧,Extract这个函数是个比较基础的函数,我帮助文件里面也是有介绍的,不会是7.0之后才加进去的吧。

chyanog 发表于 2012-10-8 09:24:03

derwille 发表于 2012-10-8 00:19 static/image/common/back.gif
7.0啊,应该不会是这个问题吧,Extract这个函数是个比较基础的函数,我帮助文件里面也是有介绍的,不会是 ...

果然是版本问题导致的,我的代码是在8.0下完成的,今天在7下试了下,确实运行出错,就是Extract函数的问题Extract[{2, 3, 7, 6, 9, 10, 11, 12}, {{{1, 2}}, {{3, 4}}}]这段代码能在8.0中运行,在7.0中就出错
页: [1]
查看完整版本: 提取一组数,提出的数内部顺序不能变化,有没有更快的方