小编Dr.*_*ius的帖子

用于IEnumerable的C#实现的F#Seq模块?

F#有一堆标准的序列操作符,我已经了解并喜欢我对Mathematica的体验.F#现在得到了很多关注,当它一般发布时,我打算经常使用它.

现在,由于F#尚未普遍发布,我无法在生产代码中真正使用它.LINQ使用类似SQL的名称来实现其中一些运算符(例如'select'是'map','where'是'filter'),但是我找不到'fold','iter'或'partition'的实现.

有没有人见过标准序列运算符的任何C#实现?这是某人应该写的东西吗?

c# f#

11
推荐指数
2
解决办法
5345
查看次数

Mathematica代码:Abs的衍生物[x]

闭门器的注意事项:这是关于编程语言(Mathematica)的问题,而不是关于学科/科学(数学)的问题.

为什么是

N[D[Sin[x], x] /. x -> Pi/4]
(*
Out -> 0.707107
*)
Run Code Online (Sandbox Code Playgroud)

N[D[Abs[x], x] /. x -> Pi/4]
(*
Out -> Derivative[1][Abs][0.785398]
*)
Run Code Online (Sandbox Code Playgroud)

强制数值结果的更好方法是什么?

wolfram-mathematica

11
推荐指数
3
解决办法
5871
查看次数

Infix for All(叶子)

Infix[] 仅适用于第一级:

Infix[(c a^b)^d]
(*
-> (a^b c) ~Power~ d
*)
Run Code Online (Sandbox Code Playgroud)

因为我想(不要问为什么)将完整的表达式切换为中缀符号,我尝试了类似的东西:

SetAttributes[toInfx, HoldAll];
toInfx[expr_] := Module[{prfx, infx},
  prfx = Level[expr, {0, Infinity}];
  infx = Infix /@ prfx /. {Infix[a_Symbol] -> a, Infix[a_?NumericQ] -> a};
  Fold[ReplaceAll[#1, #2] &, expr, Reverse@Thread[Rule[prfx, infx]]]
  ]
k = toInfx[(c a^b)^d]
(*
-> (c ~Times~ (a ~Power~ b)) ~Power~ d
*)
Run Code Online (Sandbox Code Playgroud)

但这有两个明显的问题,因为

  1. (c a^b)^d == a~Power~b~Times~c~Power~d
    所以我得到的并不是有效使用中缀.
  2. 它不健壮,并且无法轻松表达,例如 k = toInfx[a/b + ArcTan[a/b]]

是否有一种简单的方法来Infix[]为All(叶子)工作?

wolfram-mathematica

11
推荐指数
1
解决办法
300
查看次数

找到隧道'中心线'?

我有一些由'折线'组成的地图文件(每条线只是一个顶点列表)代表隧道,我想尝试找到隧道的"中心线"(粗略地显示在下面的红色).

替代文字

我过去在使用Delaunay三角测量方面取得了一些成功,但我想避免使用该方法,因为它(通常)不允许轻松/频繁地修改我的地图数据.

关于我如何能够做到这一点的任何想法?

language-agnostic algorithm graphics geometry image

10
推荐指数
1
解决办法
3792
查看次数

Mathematica Reduce/Solve:询问非重复值的最佳方式

有几次我发现我有一个系统,我需要指定所有变量都有不同的值(即非重复).

我经常做这样的事情:

k = {a, b, c, d, e, f, g}; 
Reduce[
   a != 2 && f == a + b && g == c - d && f == (d + e)/2 && f == e + g &&
   First[And @@@ {0 < # < 8 & /@ k}] && 
   Times@(Sequence @@ (Subsets[k, {2}] /. {x_, y_} -> (x - y))) != 0, 
k, Integers]
Run Code Online (Sandbox Code Playgroud)

其中Reduce等式的最后部分

Times@(Sequence @@ (Subsets[k, {2}] /. {x_, y_} -> (x - y))) != 0 …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

10
推荐指数
2
解决办法
1210
查看次数

找到满足某些条件的最大矩形块,无需显式迭代

我有几个大的2D数组,如:

   1   2  3  4  5
   --------------
1 | 0  1  1  1  0
2 | 0  1  1  1  0
3 | 0  1  0  1  1
4 | 0  1  0  1  1
Run Code Online (Sandbox Code Playgroud)

因此,最大的矩形块(按区域)满足==1 从(1,2)开始,其尺寸为(2,3).

如何在没有显式迭代的情况下使用Mathematica找到它?


注意:

只是为了简化您的测试,这是我的一个样本:

matrix = ImageData@Binarize@Import@"http://i.stack.imgur.com/ux7tA.png"
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

10
推荐指数
2
解决办法
1064
查看次数

运行NDSolve时内存耗尽

我遇到Mathematica中的"没有更多可用内存"错误消息.我明白"Parallelize []"并不(显然)会帮助我.两者都没有"ClearSystemCache []".

是什么赋予了?我只需要更多内存吗?

我的守则

Needs["VectorAnalysis`"]
Needs["DifferentialEquations`InterpolatingFunctionAnatomy`"];
Clear[Eq4, EvapThickFilm, h, S, G, E1, K1, D1, VR, M, R]
Eq4[h_, {S_, G_, E1_, K1_, D1_, VR_, M_, R_}] := \!\(
\*SubscriptBox[\(\[PartialD]\), \(t\)]h\) + 
    Div[-h^3 G Grad[h] + 
      h^3 S Grad[Laplacian[h]] + (VR E1^2 h^3)/(D1 (h + K1)^3)
        Grad[h] + M (h/(1 + h))^2 Grad[h]] + E1/(
    h + K1) + (R/6) D[D[(h^2/(1 + h)), x] h^3, x] == 0;
SetCoordinates[Cartesian[x, y, z]];
EvapThickFilm[S_, G_, E1_, K1_, D1_, VR_, M_, R_] := …
Run Code Online (Sandbox Code Playgroud)

memory windows wolfram-mathematica

10
推荐指数
1
解决办法
1241
查看次数

时间有效的部分倒置索引构建

我需要建立一个局部的Inverted Index.就像是:

l = {{x, {h, a, b, c}}, {y, {c, d, e}}}
iI[l]
(*
-> {{a, {x}}, {b, {x}}, {c, {x, y}}, {d, {y}}, {e, {y}}, {h, {x}}}
*)
Run Code Online (Sandbox Code Playgroud)

我认为它的作用非常清楚.在输入列表中,{x,y ...}是唯一的,而{a,b,c,..}则不是.输出应该按顺序排序#[[1]].

现在,我这样做:

iI[list_List] := {#, list[[Position[list, #][[All, 1]]]][[All, 1]]} & /@ 
                     (Union@Flatten@Last@Transpose@list)
Run Code Online (Sandbox Code Playgroud)

但是对于这么简单的任务看起来太复杂了,看起来太慢了,我应该能够应付军团.

试驾比较你的结果:

words = DictionaryLookup[];
abWords = DictionaryLookup["ab" ~~ ___];
l = {#, RandomChoice[abWords, RandomInteger[{1, 30}]]} & /@ words[[1 ;; 3000]];
First@Timing@iI[l]
(*
-> 5.312
*)
Run Code Online (Sandbox Code Playgroud)

那么,加速的任何想法?

wolfram-mathematica

10
推荐指数
1
解决办法
261
查看次数

Excel:使条件格式静态

有没有办法将条件格式转换为Excel中的静态格式?

我正在尝试将一系列Excel工作表导出到一个新的工作簿,外观相同但没有公式,链接等.这里的问题是我有条件格式依赖于导出范围之外的计算.

我已经尝试将工作簿保存到.html,奇怪的是IE格式化显示,但在Excel中重新打开时却没有.

excel vba excel-2003 excel-vba

9
推荐指数
3
解决办法
2万
查看次数

Init.m考虑和良好做法

由于我从未发现(或者我从来没有找到足够的)一篇关于如何管理init.m文件的好文章,我最终开发了自己的"标准",但我想知道我做得多么糟糕.

例如,我通常的init.m存储在C:\Documents and Settings\All Users\Application Data\Mathematica\Kernel\init.m(Windows)中,我使用文本编辑器对其进行编辑.

由于我不希望定义进入全局上下文,因此内容类似于:

(** User Mathematica initialization file **)
Begin["MyInitContext`"];

Cl:=Clear["Global`*"];
(* Other definitions in this Context *)

End[]; (* End Context *)
$ContextPath = Prepend[$ContextPath,"MyInitContext`"];
Run Code Online (Sandbox Code Playgroud)

我不从init.m加载包,因为我想要严格控制我加载的内容,所以我只在这里定义我每天使用的实用程序函数的快捷方式和一些选项.

那么:有没有提到良好做法?更好的方法来实现这种行为?有什么警告吗?

wolfram-mathematica

9
推荐指数
3
解决办法
2123
查看次数