小编Nas*_*ser的帖子

如何在使用DeleteCases时删除额外的{}

(Mathematica版本:8.0.4)

特定

lst = {{{{1, 2}, 3}, {{4, 5}, 6}}, {{{7, 8, 9, 10, 11}, 13}}};
lst2 = DeleteCases[lst, {x_, y_} /; y > 6, {2}]
Run Code Online (Sandbox Code Playgroud)

{{{{1, 2}, 3}, {{4, 5}, 6}}, {}}
Run Code Online (Sandbox Code Playgroud)

注意最后的额外空{}.

我找不到使用相同命令删除它的方法DeleteCases(我认为这是用于此的正确命令),所以我不得不在结果上再次应用它

lst2 = DeleteCases[lst2, {}]

{{{{1, 2}, 3}, {{4, 5}, 6}}}
Run Code Online (Sandbox Code Playgroud)

问题:在一个命令中是否有一个技巧可以{}在结果中没有得到空?所以这个命令是自包含的所有情况?

更新1

回应下面的Lou建议,增加一个额外的 { }

这是一个我得到不同结果的例子:

lst={{{{1, 2}, 3}, {{4, 5}, 6}}, {{{7, 8, 9, 10, 11}, 13}}}
Run Code Online (Sandbox Code Playgroud)

现在使用{}通过额外应用程序删除空的方法DeleteCases,我们得到

lst2 = DeleteCases[lst, …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

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

如何找到哪些动态对象需要花费很长时间才能完成?

M 8.0.1,Windows 7.

一个调试问题.

有时当我启动M并打开我的笔记本(在我关闭之前已启用动态)时,我收到此消息

在此输入图像描述

问题是,无论我点击等待还是禁用动态,消息都会不断回来.

我必须从Windows任务管理器终止进程本身(即Mathematica)以摆脱这个.

很明显,我的代码中似乎有一个动态错误.

我的问题是:M有没有办法告诉我哪些动态对象导致了这个问题?并且任何想法为什么告诉它禁用动态更新在这里没有帮助(因为我不断得到消息).

谢谢

debugging wolfram-mathematica dynamic

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

如何在Manipulate控件的定义中使用宏内部的宏?

我正在使用Leonid的宏方法(见这里)来帮助我管理控制变量的布局Manipulate.

但我发现从宏中,我无法使用其他地方定义的另一个宏.所以我想知道是否有办法在另一个宏中使用宏?

为了解释这个问题,我将首先使用一个级别的宏显示一个非常简单的Manipulate,然后我将通过尝试使用另一个宏中的宏来显示问题.

Manipulate[Text["ok"],

 Evaluate@With[{

    x = Function[{},  (*----> macro x *)
      TabView[{
        "x" -> "working on x"
        }], HoldAll
      ],

    y = Function[{}, (*----> macro y *)
      TabView[{
        "y" -> "working on y"
        }], HoldAll
      ]
    },(*WITH*)

   (* now use the above macros *)
   Grid[{
     {SetterBar[Dynamic[choice], {1, 2}]},
     {Dynamic[Which[choice == 1, x[], choice == 2, y[]] ]}
     }]

   ],
 {{choice, 1}, None},
 ContentSize -> 300

 ]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在为复选框添加一个宏,然后尝试从上面的'x'宏中使用它:

操纵[文字[ "确定"],

 Evaluate@With[{

    checkBox = Function[{}, Checkbox[Dynamic[c]], HoldAll], …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

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

将纯函数传递给模块

只是想检查是否可以安全地执行以下操作:

假设我有一个函数'f(x)',它还取决于其他参数.例如,功能a*Exp[ (x-x0)^2/(2*std^2)]

从UI我读这些参数的用户输入值(通过滑块)ax0std,然后我使纯函数变量

 f=Function[{x,a,x0,std}, a*Exp[ (x-x0)^2/(2*std^2)]
Run Code Online (Sandbox Code Playgroud)

以上是在相同的上下文中(在Manipulate控制区域中),当我正在读取用户输入时,然后当用户点击按钮来运行程序时,我调用另一个较低级别的函数来处理这个输入,就像这样

 foo[f,a,x0,std]
Run Code Online (Sandbox Code Playgroud)

然后在foo中,f通过这样的调用来评估一些网格点(x1,x2等等)

 foo[f_,a_,x0,std_]:=Module[{x1,x2...},     
   .....
   f[x1,a,x0,std];
   f[x2,a,x0,std];
   f[x3,a,x0,std]; etc... 
   ....
   ]
Run Code Online (Sandbox Code Playgroud)

请注意,在foo中,只使用x了纯函数的参数,其余的只是为了骑行.

但由于它们没有在foo中使用,我想不要传递所有其他参数a,x0,std.

所以,我改变了纯粹的功能

 f=Function[{x}, a*Exp[ (x-x0)^2/(2*std^2)];
Run Code Online (Sandbox Code Playgroud)

然后像这样叫foo

 foo[f]
Run Code Online (Sandbox Code Playgroud)

然后在里面,我做

 foo[f_]:=Module[{},     
   .....
   f[x1];
   f[x2];
   f[x3]; etc...
   ....
   ]
Run Code Online (Sandbox Code Playgroud)

我测试了这个,它有效.(起初我以为,因为背景是不同的模块内富,我必须通过a,x0,std使用f一起,但我没有给.看来a,x0stdx纯函数内部值保存为全局变量,并通过在纯函数体.

我的问题:您认为上述第二种方法有什么问题吗?我忽视的东西?在我做过的测试中,它到目前为止工作正常.它会使它变得更简单,因为现在我只需要传递纯函数本身,而不是传递用于构建的所有其他参数,因为它们在foo中不需要.

换句话说,我试图在这两个设置之间做出决定:

在此输入图像描述

只是想检查一下.

谢谢

wolfram-mathematica

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

MATLAB:比较数组中的元素

假设有阵列A和B,两者都可以有任意数字和大小.例如

A=[1 2 3]
B=[4 8 52 7 10]
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何方法可以检查A中的任何元素是否包含在B中而不使用循环?再一次,数组的数量和大小将是任意的,所以我不能硬编码.任何帮助和输入将不胜感激.谢谢!

arrays matlab contains

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