Graph[]有倾向于切断Mathematica中的顶点标签.我正在寻找一个强大的解决方法.
例:
Graph[{1 -> 2, 2 -> 3, 3 -> 1}, VertexLabels -> "Name"]
Run Code Online (Sandbox Code Playgroud)
![Graph []切断标签'2'](https://i.stack.imgur.com/29GgU.png)
我目前的解决方法:
SetOptions[Graph, ImagePadding -> 12]
Run Code Online (Sandbox Code Playgroud)
这不稳定,因为ImagePadding需要根据标签大小手动调整值.
我需要得到质心(心)的一组与亚像素精度二进制图像的组成部分.
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) 我有一个类似的问题: 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
当我创建并绘制此列表时:
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绘图并没有摆脱

ColorFunction SandyTerrain中没有任何白色,因此必须是ListDensityPlot才能在该区域中绘制任何内容.
什么可能导致这种情况发生,我该如何阻止它?
我很惊讶,当我发现那个数学给出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
我刚刚创建了一个非常大的神经网络,虽然是非常强大的硬件,想象我的震惊和失望,当我意识到来自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
这里发生了什么(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.但是,我有兴趣找出具体发生这种情况的原因,以及这个错误是否可以预测.
我现在能够使用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) 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).
我还不能掌握分组指令的方法 …
有没有人在远程并行内核中使用 Mathematica 的 C 扩展(LibraryLink 或 MathLink——目前我正在使用 LibraryLink)?
简而言之:当子内核在远程机器上运行时,如何在并行和非并行评估中透明地使用 LibraryLink 定义的函数(请参阅CreateLibrary和LibraryFunctionLoad)?
我找了一些设置步骤,这将让我有一个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在主内核中设置值: …