找回密码
 注册
Simdroid-非首页
查看: 149|回复: 10

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

[复制链接]
发表于 2012-10-5 23:23:13 | 显示全部楼层 |阅读模式 来自 上海
还是给个例子,我有一组数A = {{1, 2, 3, 4, 5, 6, 7, 8}, {2, 3, 7, 6, 9, 10, 11, 12}}得到
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]]}} & /@ 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[A_] := (liu1 = {{#[[1]], #[[2]], #[[3]], #[[4]]}, {#[[1]], #[[
        2]], #[[6]], #[[5]]}, {#[[1]], #[[4]], #[[8]], #[[5]]}, {#[[
        7]], #[[8]], #[[5]], #[[6]]}, {#[[7]], #[[6]], #[[2]], #[[
        3]]}, {#[[7]], #[[3]], #[[4]], #[[8]]}} & /@ A;
  ac = Flatten[liu1, 1];
  c = Map[Sort, ac, {1}];
  f = Reap@
    Do[If[Length[Position[c, c[[i]]]] == 1, Sow[i]], {i, 1,
      Length[c]}];
  dd = f[[2, 1]];
  El = {};
  Do[El = Append[El, ac[[dd[[i]]]]], {i, 1, Length[dd]}]; El)
f[A]
 楼主| 发表于 2012-10-5 23:49:27 | 显示全部楼层 来自 上海
Simdroid开发平台
我这里有组数,算了558秒,太慢了,各位如有更快的算法可以对比一下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2012-10-6 10:40:28 | 显示全部楼层 来自 安徽芜湖
本帖最后由 gotit 于 2012-10-6 21:37 编辑

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

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


评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2012-10-6 11:36:03 | 显示全部楼层 来自 北京

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

A1可以这样简化的


评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2012-10-6 20:23:12 | 显示全部楼层 来自 上海
gotit 发表于 2012-10-6 10:40
data = Flatten[{{#[[1]], #[[2]], #[[3]], #[[4]]}, {#[[1]], #[[2]], #[[
        6]], #[[5]]}, {#[[1]] ...

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

使用道具 举报

 楼主| 发表于 2012-10-6 20:40:30 | 显示全部楼层 来自 上海
chyanog 发表于 2012-10-6 11:36
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\"]\) "
回复 不支持

使用道具 举报

发表于 2012-10-6 22:10:29 | 显示全部楼层 来自 北京西城
derwille 发表于 2012-10-6 20:40
谢谢,不过我这里报错啊,不知哪里出了问题
A = {{1, 2, 3, 4, 5, 6, 7, 8}, {2, 3, 7, 6, 9, 10, 11, 12 ...

我这里是没有问题的,你再 Clear[A,A1] 一下试试
回复 不支持

使用道具 举报

 楼主| 发表于 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}}}]}
不知何故
回复 不支持

使用道具 举报

发表于 2012-10-7 23:53:16 | 显示全部楼层 来自 北京西城
derwille 发表于 2012-10-7 20:28
有没有其他人帮忙试一下如下代码看看
A = {{1, 2, 3, 4, 5, 6, 7, 8}, {2, 3, 7, 6, 9, 10, 11, 12}};
A1 = ...

你的Mathematica是哪个版本呢?
回复 不支持

使用道具 举报

 楼主| 发表于 2012-10-8 00:19:38 | 显示全部楼层 来自 上海
chyanog 发表于 2012-10-7 23:53
你的Mathematica是哪个版本呢?

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2012-10-8 09:24:03 | 显示全部楼层 来自 北京
derwille 发表于 2012-10-8 00:19
7.0啊,应该不会是这个问题吧,Extract这个函数是个比较基础的函数,我帮助文件里面也是有介绍的,不会是 ...

果然是版本问题导致的,我的代码是在8.0下完成的,今天在7下试了下,确实运行出错,就是Extract函数的问题
  1. Extract[{2, 3, 7, 6, 9, 10, 11, 12}, {{{1, 2}}, {{3, 4}}}]
复制代码
这段代码能在8.0中运行,在7.0中就出错
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-29 07:50 , Processed in 0.045726 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表