标签: mathematica-8

Graph []切断了Mathematica中的顶点标签

Graph[]有倾向于切断Mathematica中的顶点标签.我正在寻找一个强大的解决方法.

例:

Graph[{1 -> 2, 2 -> 3, 3 -> 1}, VertexLabels -> "Name"]
Run Code Online (Sandbox Code Playgroud)

Graph []切断标签'2'

我目前的解决方法:

SetOptions[Graph, ImagePadding -> 12]
Run Code Online (Sandbox Code Playgroud)

这不稳定,因为ImagePadding需要根据标签大小手动调整值.

graphics wolfram-mathematica mathematica-8

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

ComponentMeasurements [_,"Centroid"]结果偏移

我需要得到质心(心)的一组与亚像素精度二进制图像的组成部分.

Mathematica 8附带了一个很好的补充:

i =  Import@"http://i.stack.imgur.com/2pxrN.png";  
m1 = ComponentMeasurements[MorphologicalComponents[i], "Centroid"] /. 
                                                                Rule[_, x_] -> x
(*
-> {{403.229, 453.551}, {660.404, 371.383}, {114.389, 434.646}, {295.5, 206.}}
*)
Run Code Online (Sandbox Code Playgroud)

但是当这些结果显示出与其他地方进行的其他计算有些不一致时,我遇到了一些麻烦.

所以我自己动手,也许不好看:

i = Import@"http://i.stack.imgur.com/2pxrN.png";
f[i_] := N@{#[[2]], ImageDimensions[i][[2]] - #[[1]]} & /@
         ( Mean /@
             Function[x, Map[
                Position[x, #, 2] &,
                Complement[Union@Flatten[x], {0}]]]
             [MorphologicalComponents[i]]);
f[i]
Show[i, Graphics[{Red, Disk[#, 10] & /@ f[i]}]]
(*
-> {{403.729, 453.051}, {660.904, 370.883}, {114.889, 434.146}, {296., 205.5}}
*)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您可以看到这些结果之间存在.5偏移:

Thread[Subtract[m1, f[i]]]
(*
-> {{-0.5, -0.5, -0.5, …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica image-processing mathematica-8

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

Mathematica中的子内存内存控制

我有一个类似的问题: Mathematica耗尽内存

我对以下内容感兴趣:

ParallelTable[F[i], {i, 0, 14.9, 0.001}]
Run Code Online (Sandbox Code Playgroud)

哪里F[i]是一个复杂的数值积分(我还没有找到一种简单的方法来重现问题,而没有页面填充定义的积分).

我的问题是子内核在内存中爆炸,如果我不让机器交换,我必须停止评估.

但即使我已经停止评估,内核也不会释放他们占用的内存.

ClearSystemCache[] 
Run Code Online (Sandbox Code Playgroud)

我甚至试过了

ParallelEvaluate[ClearSystemCache[]]
Run Code Online (Sandbox Code Playgroud)

ParallelEvaluate[MemoryInUse[]]
Run Code Online (Sandbox Code Playgroud)

留在

{823185944, 833146832, 812429208, 840150336, 850057024, 834441704, 
847068768, 850424224}
Run Code Online (Sandbox Code Playgroud)

似乎所有内存控制只适用于主内核?到目前为止,唯一的方法是关闭所有内核并再次启动它们.

我真的希望有一些解决方案...非常感谢.

memory parallel-processing wolfram-mathematica mathematica-8

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

Mathematica ListPlot中的白色区域

当我创建并绘制此列表时:

var = 2;
okList = {{0.8, var, 0.8, 0.8}, {0, 0.3, 0.6, 0.9}, {0, 1, 2, 3}};
lp = ListDensityPlot[okList, ColorFunction -> "SandyTerrain"]
Run Code Online (Sandbox Code Playgroud)

缩放

或者,未缩放,像这样:

lp = ListDensityPlot[okList, ColorFunction -> "SandyTerrain",
     ColorFunctionScaling -> False]
Run Code Online (Sandbox Code Playgroud)

未缩放

正如我所料,我得到了一个全彩色的正方形.

但是,当我尝试这个:

var = 0.8;
list = {{0.8, var, 0.8, 0.8}, {0, 0.3, 0.6, 0.9}, {0, 1, 2, 3}};
problem = ListDensityPlot[list, ColorFunction -> "SandyTerrain"]
Run Code Online (Sandbox Code Playgroud)

我在拐角处得到一个白色的补丁.

问题

哪个用ColorFunctionScaling-> False绘图并没有摆脱

problem_scaled

ColorFunction SandyTerrain中没有任何白色,因此必须是ListDensityPlot才能在该区域中绘制任何内容.

什么可能导致这种情况发生,我该如何阻止它?

plot wolfram-mathematica graph mathematica-8

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

Mathematica渲染和输出为不同颜色的RGB颜色值的最小差异是什么?

我很惊讶,当我发现那个数学给出True了下面的代码(在32位的Windows XP与数学 8.0.1):

Rasterize[Graphics[{RGBColor[0, 0, 0], Disk[]}]] === 
 Rasterize[Graphics[{RGBColor[0, 0, 1/257], Disk[]}]]
Run Code Online (Sandbox Code Playgroud)

Mathematica渲染和输出为不同颜色的RGB颜色值的最小差异是什么?它是机器依赖的吗?

rendering wolfram-mathematica mathematica-frontend mathematica-8

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

Wolfram Mathematica中的神经网络包不是并行的吗?

我刚刚创建了一个非常大的神经网络,虽然是非常强大的硬件,想象我的震惊和失望,当我意识到来自NeuralNetworks`包的NeuralFit []似乎只使用一个核心,甚至没有达到最大容量.我伤心欲绝.我是否真的必须从头开始编写完整的NN实现?还是我想念一些简单的东西?

我的网络对200个神经元的2个隐藏层进行了200次输入以产生100个输出.我知道我们正在谈论数万亿计算,但只要我知道我的硬件是弱点 - 可以升级.如果单独放置一段时间,它应该能够很好地处理这种网络的训练(4Ghz 8线程机器具有24Gb的2000Mhz CL7内存,在SATA-III上运行RAID-0 SSD驱动器 - 我很确定).

想法?建议?提前感谢您的意见.

wolfram-mathematica mathematical-optimization neural-network mathematica-8

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

在mma8中集成与NIntegrate中的错误

这里发生了什么(Mathematica版本8.x):

NIntegrate[Log[1/2 + Sqrt[1/4 - 1/(4 x^2)]]/x, {x, 1, Infinity}]
--> -0.171007

Integrate[Log[1/2 + Sqrt[1/4 - 1/(4 x^2)]]/x, {x, 1, Infinity}] // N
--> 0.171007
Run Code Online (Sandbox Code Playgroud)

NIntegrate[]值是正确的.我PrincipalValue之前遇到了选择问题,但是a)已经在mma8中修复了这些问题,并且b)这个积分在积分区域中没有,或者至少不应该具有极点.

编辑:感谢人们建议解决这个问题,一般的解决方案是,例如,专门使用NIntegrate.但是,我有兴趣找出具体发生这种情况的原因,以及这个错误是否可以预测.

wolfram-mathematica integrate mathematica-8

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

如何在Mathematica中获得直方图以百分比显示分档?

我现在能够使用hspec"概率"生成一个y轴上的值在0.0和1.0之间的直方图,但是我想知道是否有办法将其显示为百分比(这只会改变标签) y轴).

这是我目前正在使用的:

Histogram[rawdata, {{0, 10, 20, 30, 40, 50, 60, 70, 80, 90,100}}, "Probability", 
          PlotRange -> {0, 1}]
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica mathematica-8

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

listPlot的多个指令

daList={{0.059, 0.298, 0.726, 0.735, 1.461, 2.311, 3.315}, 
        {0.05, 0.404,0.664, 0.782, 1.376, 2.328, 3.432}, 
        {0.087, 0.628, 0.986, 1.187,1.914, 3.481, 4.993}, 
        {0.073, 0.594, 0.975, 1.147, 2.019, 3.417,5.037}, 
        {0.143, 0.821, 1.442, 1.595, 2.983, 4.98, 7.604}, 
        {0.107,0.871, 1.431, 1.684, 2.964, 5.015, 7.394}}


ListPlot[daList,
         Joined -> True,
         PlotRange -> {{1, 7}, {0, 7}}, 
         PlotStyle -> {{Thick, Lighter[Red, .5]}, 
                       {Dashed, Black}, 
                       {Thick,Lighter[Red, .3]}, 
                       {Dashed, Black}, 
                       {Thick,Lighter[Red, .1]}, 
                       {Dashed, Black}},
         Prolog ->{GrayLevel[0.5], EdgeForm[Thickness[.005]], 
                   Rectangle[{1.01, 0.01}, {6.99, 6.99}]}]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如您所见,我需要为每一行指定不同的指令.

我希望Dashed Black Line成为Points(Joined-> False).

我还不能掌握分组指令方法 …

plot styles wolfram-mathematica mathematica-8

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

远程并行内核和 LibraryLink —— 如何让它们一起工作?

有没有人在远程并行内核中使用 Mathematica 的 C 扩展(LibraryLink 或 MathLink——目前我正在使用 LibraryLink)?

简而言之:当子内核在远程机器上运行时,如何在并行和非并行评估中透明地使用 LibraryLink 定义的函数(请参阅CreateLibraryLibraryFunctionLoad)?

我找了一些设置步骤,这将让我有一个libraryFun函数(用C语言编写),可无论是通常称为libraryFun[args],或并行(两者Parallelize@Table[libraryFun[arg], {arg, 0, 100}]和相同的ParallelTable[]时候subkernels在远程机器上运行)。

如果我也没有遇到问题,远程运行主内核也可能会更好。


更新

与此同时,我取得了一些进展。我会在这里描述它。

首先,ParallelEvaluate将对所有并行内核中的表达式求值。如果 C 扩展的源文件被复制到远程机器,我们可以像这样在那里编译它们:

ParallelNeeds["CCompilerDriver`"]
k1 = First@Kernels[]
ParallelEvaluate[SetDirectory["/path/to/source/files"]]
ParallelEvaluate[CreateLibrary["sourefile", "myLibrary"]]
Run Code Online (Sandbox Code Playgroud)

此操作只需执行一次。我假设该库已经在主内核机器上编译。

在此之后,在所有后续会话中,我们可以FindLibrary在主计算机和远程计算机上使用来加载库。

LibraryFunctionLoad[myFun = FindLibrary["myLibrary"], "fun", ...]
ParallelEvaluate[myFun = LibraryFunctionLoad[FindLibrary["myLibrary"], "fun", ...]]
Run Code Online (Sandbox Code Playgroud)

麻烦来了。 由于路径myFun不同,在主内核和并行内核中会有不同的值。

所以问题是:如何确保myFun主内核和并行内核之间的值不会意外同步?

我将在一个孤立的例子中展示这可能是如何意外发生的:

In[1]:= LaunchKernels[2]
Out[1]= {KernelObject[1, "local"], KernelObject[2, "local"]}
Run Code Online (Sandbox Code Playgroud)

x在主内核中设置值: …

wolfram-mathematica mathematica-8

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