周末这让我很烦恼:什么是解决那些Waldo的好方法? [ 'Wally'在北美之外]使用Mathematica(图像处理和其他功能)进行拼图?
这是我到目前为止的功能,它通过调暗一些非红色来减少视觉复杂度:
whereIsWaldo[url_] := Module[{waldo, waldo2, waldoMask},
waldo = Import[url];
waldo2 = Image[ImageData[
waldo] /. {{r_, g_, b_} /;
Not[r > .7 && g < .3 && b < .3] :> {0, 0,
0}, {r_, g_, b_} /; (r > .7 && g < .3 && b < .3) :> {1, 1,
1}}];
waldoMask = Closing[waldo2, 4];
ImageCompose[waldo, {waldoMask, .5}]
]
Run Code Online (Sandbox Code Playgroud)
以及这个"有效"的网址示例:
whereIsWaldo["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/DepartmentStore.jpg"]
Run Code Online (Sandbox Code Playgroud)
(Waldo是收银台):

我正在寻找以下快速实现,我会称之为Position2D缺乏一个更好的术语:
Position2D[ matrix, sub_matrix ]
Run Code Online (Sandbox Code Playgroud)
它找到sub_matrix内部的位置matrix并返回匹配的左上角和右下角/列.
例如,这个:
Position2D[{
{0, 1, 2, 3},
{1, 2, 3, 4},
{2, 3, 4, 5},
{3, 4, 5, 6}
}, {
{2, 3},
{3, 4}
}]
Run Code Online (Sandbox Code Playgroud)
应该归还:
{
{{1, 3}, {2, 4}},
{{2, 2}, {3, 3}},
{{3, 1}, {4, 2}}
}
Run Code Online (Sandbox Code Playgroud)
它应该足够快,可以快速处理3000x2000具有100x100子矩阵的矩阵.为简单起见,仅考虑整数矩阵就足够了.
在重复列表中查找句点的最佳方法是什么?
例如:
a = {4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2}
Run Code Online (Sandbox Code Playgroud)
重复{4, 5, 1, 2, 3}与余数{4, 5, 1, 2}匹配,但不完整.
该算法应该足够快以处理更长的情况,如下所示:
b = RandomInteger[10000, {100}];
a = Join[b, b, b, b, Take[b, 27]]
Run Code Online (Sandbox Code Playgroud)
$Failed如果没有如上所述的重复模式,则算法应该返回.
我正在使用Mathematica 8.当我尝试命令时
Sum[r^n Floor[n/2], {n, 0, Infinity}]
Run Code Online (Sandbox Code Playgroud)
我明白了
r^2/((-1 + r)^2 (1 + r))
Run Code Online (Sandbox Code Playgroud)
这是正确的,但从而1不是0:
Sum[r^n Floor[n/2], {n, 1, Infinity}]
Run Code Online (Sandbox Code Playgroud)
给
r/((-1 + r)^2 (1 + r))
Run Code Online (Sandbox Code Playgroud)
不是.这是怎么回事?
任何人都可以建议从60个.mx文件列表中导入几个GB数字数据(以.mx格式),每个文件大约650 MByte?
- 太大而不能在这里发布 - 研究问题涉及简单的统计操作,其数据量是GB的两倍(大约34),而不是RAM(16).为了处理数据大小问题,我只是将事情拆分并使用Get/Clear策略进行数学计算.
它确实有效,但是调用Get["bigfile.mx"]需要相当长的时间,因此我想知道使用BLOB或者PostgreSQL或MySQL的任何内容,或者人们使用什么数据库来获取数字数据GB都会更快.
所以我的问题是:在Mathematica中处理真正大型数据集导入的最有效方法是 什么?
我还没有尝试过,但我认为DataBaseLink的SQLImport会慢于Get["bigfile.mx"].
谁有经验可以分享?
(对不起,如果这不是一个非常具体的编程问题,但它真的可以帮助我继续进行耗时的发现 - 找出最好的137种可能性 - 解决 - 一,问题的-数学).
我有一个矩阵,即一个非参差不齐的列表列表,并给出一个坐标列表,例如以{{0,0},{1,1},{2,2},...{5,5}}我的形式,我想跟踪该矩阵中的路径并以图形方式显示结果.路径的彩色带很好.
请帮我在Mathematica中编写这样的函数.非常感谢!
(Mathematica版本:8.0.4,在Windows 7上)
有人可以提醒我如何告诉M在以下情况下不要更改ImageSize:
我有一个Manipulate,我制作一个网格,在网格内部,我要么显示一个图,要么显示2个图,具体取决于控件的选择.
为了保持整体显示的图像相同,如果我显示一个图我使用一个尺寸,如果我显示2个图,我使用每个图的一半长度.到目前为止很容易.
奇怪的是,当我使用鼠标旋转一个绘图案例,然后切换回2个绘图时,绘图大小现在不使用我指定的ImageSize.
似乎通过使用鼠标旋转一个绘图,它影响了同一屏幕位置上显示的下一个绘图.
使用SphericalRegion -> True与否,没有效果.使用RotationAction -> "Fit"没有效果.
这是我的意思的一个小例子,然后我展示了我目前如何解决这个问题.但我通过使用GraphicsGrid代替Grid来解决它.如果可能的话,我想继续使用Grid.
Manipulate[
Module[{opt = {Spacings -> {0, 0}, Frame -> All}, p,
size, data = Table[RandomReal[], {10}, {10}], wid = 300, len = 300},
size = If[choice == 1, {wid, len}, {wid, len/2}];
Print[size];
p = ListPlot3D[data,SphericalRegion->True,ImagePadding -> 10,ImageSize ->size];
If[choice == 1,
Grid[{{p}}, Sequence@opt], Grid[{{p}, {p}}, Sequence@opt]
]
],
Row[{SetterBar[Dynamic[choice], {1, 2}]}],
{{choice, 2}, None}
]
Run Code Online (Sandbox Code Playgroud)
要重现这个问题,很简单:首先我要注意尺寸,这就是我想保留它的方式.现在我点击选项1,现在使用鼠标旋转一个图.现在我点击选择2返回,然后我看到情节大小不是我预期的.

我确信这是我需要使用的选项.还没找到它.
PS.实际上似乎发生的是,旋转的SAME图,停留在内容区域,并用于代替第二种情况下的2个图中的一个.很奇怪.我必须在某个地方做些傻事,因为这太奇怪了.
更新2:48 am …
我的mathematica输出是
-0.751988 - 0.0708732 Log[e] - 0.0140273 Log[e]^2
Run Code Online (Sandbox Code Playgroud)
但是我希望mathematica为我计算这个表达式,即设置Log [e] = 1并对术语求和.我如何指示它这样做.我假设它必须将功能视为复杂的??
问候
FindRoot[
27215. - 7.27596*10^-12 x + 52300. x^2 - 9977.4 Log[1. - 1. x] == 0
,
{x, 0.000001}
]
Run Code Online (Sandbox Code Playgroud)
收敛到解决方案{x -> -0.0918521}但是如何让Mathematica在解决方案之前避免以下错误消息:
FindRoot::nlnum: The function value {Indeterminate} is not a list of numbers with dimensions {1} at {x} = {1.}. >>
Run Code Online (Sandbox Code Playgroud)
我正在使用FindRoot来解决一些非常混乱的表达式.我有时也收到以下错误,虽然Mathematica仍然会产生答案,但我想知道是否有办法避免它:
FindRoot::lstol: The line search decreased the step size to within tolerance specified by AccuracyGoal and PrecisionGoal but was unable to find a sufficient decrease in the merit function. You may need more than MachinePrecision digits …Run Code Online (Sandbox Code Playgroud) 我Put (>>)用来存储我在Mathematica中获得的信息.问题是我提出了几个变量.但是,如果我执行以下操作,它会输出到一个名为year而不是我的变量的文件.
例如:
year=64;
sortedTally>>year;
Run Code Online (Sandbox Code Playgroud)
这将导出到名为file的文件year而不是名为的文件64.文档说明expr >> filename等同于expr >> "filename".有没有办法绕过这个并放入一个基于变量更改的文件名?在操作员输入表单(底部)的文档文件中也类似地重申了这一点.
(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) 我无法弄清楚如何用一个变量绘制一个矢量场.也许Mathematica不支持这一点.例如:
r(t) = cost j + sint i
Run Code Online (Sandbox Code Playgroud)
与...一样
<cost, sint>
Run Code Online (Sandbox Code Playgroud)
这不起作用:
VectorPlot[{cos t, sin t}, {t, 0, 2 Pi}]
Run Code Online (Sandbox Code Playgroud)
作为奖励如何获取向量的导数?