关于Mathematica软件的命令使用的讨论
使用了Mathematica软件有一段时间了,发现用一些命令的组合可以实现一些比较基础的功能,但是觉得方法未必是最优的,希望大家能够讨论一下有没有更好的方法,不知道大家有没有兴趣。Q1:
描述:已知一个List为si,列出每个元素出现的次数。
输入:si={1,2,1,1,"a",{2},1,2,2}
输出:so={{1, 4}, {2, 3}, {"a", 1}, {{2}, 1}}
方法:Map[{First[#], Length[#]} &, Split]]
Q2:
描述:已知一个List为si和函数f,且f==f,求Outer,但是,结果中不包括f,且f和f只出现一次。
输入:si={1,2,5}
输出:so={f, f, f}
方法:Map]]], si[[#[]]]] &, Subsets], {2}]]
Q3:
描述:用第一个元素来汇总。
输入:si = {{1, 1}, {2, "Two"}, {3, 3}, {1, "One"}, {1, "yi"}, {2, "1+1"}, {5, "5th"}, {3, {"x", "x", "x"}}}
输出:so={{1, {1, "One", "yi"}}, {2, {"1+1", "Two"}}, {3, {3, {"x", "x", "x"}}}, {5, {"5th"}}}
方法:Map[{First], Last[#]} &, Map, First[#1] == First[#2] &]]]
上面是3个例子,请大家看看。呵呵。
si = {1, 2, 1, 1, "a", {2}, 1, 2, 2};
Tally
si = {1, 2, 5};
f @@@ Subsets
f @@@ Table], {i, Reverse@si}, {j, si}]
si = {{1, 1}, {2, "Two"}, {3, 3}, {1, "One"}, {1, "yi"}, {2,"1+1"}, {5, "5th"}, {3, {"x", "x", "x"}}};
{#[], #[[;; , 2]]} & /@ GatherBy Tally@{1,2,1,1,"a",{2},1,2,2}
运行结果:
{{1, 4}, {2, 3}, {"a", 1}, {{2}, 1}} 如何用mathematica软件统计表中的元素的个数
http://bbs.emath.ac.cn/forum.php?mod=viewthread&tid=5123&extra=page%3D1
昨天我就想回复你的! Q4:
描述:将数字转换为字母,FromCharacterCode。
输入:si={{65, {66, {70}, 69}}, 67}
输出:so={{"A", {"B", {"F"}, "E"}}, "C"}
Q5:
描述:在一定条件下,求f。
输入:si=f,x。(要求在x之后除了回车没有任何字符。)
输出:so=f 借楼提问:
怎么让Mathematica求多元多项式的指数
比如a x y + x 以x、y为未知数。Exponent得到x、y各自独立结果,不是 2。
我现在采取换元{x->z x ,y->z y}再求Exponent[%,z] zhouguang 发表于 2013-11-4 10:59
Q4:
描述:将数字转换为字母,FromCharacterCode。
输入:si={{65, {66, {70}, 69}}, 67}
Clear["Global`*"];(*Clear all variables*)
fun:=Module[{a=a0},
If[Not@ListQ@a,(*如果a不是一个表*)
FromCharacterCode@a,(*由数字到字母*)
(*如果a是表,但是a的第一个元素不是表*)
If&&(Not@ListQ@First@a),
Join],
Map
]
]
]
si={{65, {66, {70}, 69}}, 67};
Map
结果:{{"A", {"B", {"F"}, "E"}}, "C"}
zhouguang 发表于 2013-11-4 10:59
Q4:
描述:将数字转换为字母,FromCharacterCode。
输入:si={{65, {66, {70}, 69}}, 67}
si = {{65, {66, {70}, 69}}, 67};
si /. x_Integer :> FromCharacterCode
Clear
f := FromCharacterCode;
f := x;
f //@ si
g := FromCharacterCode
g := x
g //@ si
(*利用递归解决问题!*)
Clear["Global`*"];(*Clear all variables*)
fun:=Module[{a=a0},
If[Not@ListQ@a,(*如果a不是一个表*)
FromCharacterCode@a,(*由数字到字母*)
(*如果a是表,但是a的第一个元素不是表*)
If&&(Not@ListQ@First@a),
Join],
(*如果a是表,且a的第一个元素还是表*)
Map
]
]
]
si={{65, {66, {70}, 69}}, 67};
Map
第二个版本的代码
(*利用递归解决问题!*)
Clear["Global`*"];(*Clear all variables*)
fun:=Module[{a=a0},
If[Not@ListQ@a,(*如果a不是一个表*)
FromCharacterCode@a,(*由数字到字母*)
Prepend,fun@First@a],
]
]
si={{65, {66, {70}, 69}}, 67};
Map