- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
美好的一天,
我有一些非常简单和复杂的功能,比如f[x,y]
。而且我需要构造它的详细ContourPlot
。此外,由于缺少物理内存,功能f[x,y]
有时会失败。在这种情况下,我必须停止评估,自己调查点{x,y}的问题情况。然后,我应该将元素{x,y,f [x,y]}添加到f[x,y]
的计算值列表(例如“cache”),然后重新开始ContourPlot
的评估。 ContourPlot
必须从缓存中获取所有已经计算出的f
值。我希望将此类列表存储在某个文件中,以便以后可以重用。手动将有问题的点添加到此文件中可能更简单。
如果f
的计算值列表可能包含10000-50000点,最快的实现方法是什么?
最佳答案
假设我们的慢速函数具有签名f[x, y]
。
纯内存方法
如果您对内存缓存感到满意,那么最简单的方法就是使用备忘录:
Clear@fmem
fmem[x_, y_] := fmem[x, y] = f[x, y]
$runningLogFile = "/some/directory/runningLog.txt";
Clear@flog
flog[x_, y_] := flog[x, y] = f[x, y] /.
v_ :> (PutAppend[Unevaluated[flog[x, y] = v;], $runningLogFile]; v)
If[FileExistsQ[$runningLogFile]
, Get[$runningLogFile]
, Export[$runningLogFile, "", "Text"];
]
flog
与
fmem
相同,除了它还会在运行日志中写入一个条目,该条目可用于在以后的 session 中还原缓存的定义。最后一个表达式在找到现有日志文件时(或如果不存在则创建该文件)重新加载这些定义。
DumpSave
功能。
fsql[x_, y_] :=
loadCachedValue[x, y] /. $Failed :> saveCachedValue[x, y, f[x, y]]
loadCachedValue
和
saveCachedValue
。基本思想是创建一个SQL表,其中每行包含一个
x
,
y
和
f
三元组。每次需要值时都会查询SQL表。请注意,这种方法比内存中的缓存要慢得多,因此,当
f
的计算花费的时间比SQL访问时间长得多时,这种方法才有意义。 SQL方法不会遭受困扰文本日志文件方法的舍入错误。
loadCachedValue
和
saveCachedValue
的定义,以及其他一些有用的辅助函数:
Needs["DatabaseLink`"]
$cacheFile = "/some/directory/cache.hsqldb";
openCacheConnection[] :=
$cache = OpenSQLConnection[JDBC["HSQL(Standalone)", $cacheFile]]
closeCacheConnection[] :=
CloseSQLConnection[$cache]
createCache[] :=
SQLExecute[$cache,
"CREATE TABLE cached_values (x float, y float, f float)
ALTER TABLE cached_values ADD CONSTRAINT pk_cached_values PRIMARY KEY (x, y)"
]
saveCachedValue[x_, y_, value_] :=
( SQLExecute[$cache,
"INSERT INTO cached_values (x, y, f) VALUES (?, ?, ?)", {x, y, value}
]
; value
)
loadCachedValue[x_, y_] :=
SQLExecute[$cache,
"SELECT f FROM cached_values WHERE x = ? AND y = ?", {x, y}
] /. {{{v_}} :> v, {} :> $Failed}
replaceCachedValue[x_, y_, value_] :=
SQLExecute[$cache,
"UPDATE cached_values SET f = ? WHERE x = ? AND y = ?", {value, x, y}
]
clearCache[] :=
SQLExecute[$cache,
"DELETE FROM cached_values"
]
showCache[minX_, maxX_, minY_, maxY_] :=
SQLExecute[$cache,
"SELECT *
FROM cached_values
WHERE x BETWEEN ? AND ?
AND y BETWEEN ? AND ?
ORDER BY x, y"
, {minX, maxX, minY, maxY}
, "ShowColumnHeadings" -> True
] // TableForm
openCacheConnection[]
。完成后,您应该调用
closeCacheConnection[]
。仅一次,您必须调用
createCache[]
来初始化SQL数据库。提供
replaceCachedValue
,
clearCache
和
showCache
用于手动干预。
关于wolfram-mathematica - 用内存构造函数的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5287817/
我刚刚创建了一个非常大的神经网络,尽管是在非常强大的硬件上,想象一下我的震惊和失望,当我意识到 NeuralNetworks 包中的 NeuralFit[] 似乎只使用一个核心,甚至没有发挥到最大能力
我想知道是否有办法在 Mathematica 中处理大文件? 目前我有一个大约 500Mb 的文件,其中包含表数据。 Import["data.txt","Table"]; 什么是替代方式? 最佳答案
Mathematica 是否支持为数学符号安装非 Wolfram 字体? 其他数学符号字体的例子包括最近发布的 STIX 字体、微软的 Cambria 字体、Latex 下使用的 Math Tim
这是一个简单的 WolframCloud computation : 当 0 Infinity]会显示正确答案,即Boole[0Infinity] 输出应该是Boole[0 Infinity] 顺便说
在 MATHEMATICA 中是否有一种快速简便的方法来截断十进制数,比如超过 4 位? 对于 N[1/6, 4],它四舍五入为 =1.6667。 我要你切到 1.6666。 谢谢! 最佳答案 f[x
我有一个等式(因为是 VBA 代码所以使用了括号) Y=(P/(12E((bt^3)/12))*A 我知道每个变量,但不知道“b”。有什么方法可以让 Wolfram Alpha“重新定义”(而不是求解
我找到了 Wolfram Workbench Mathematica 开发的良好环境。 然而,当我在 Mathematica 中编程时,我需要经常浏览帮助系统。 Workbench 提供了一个工具提示
问题 我正在查看 Wolfram's Mathematica 生成随机数的方法,发现它使用 Cellular Automata Rule 30 .其基本解释如下: 一个基本元胞自动机的演化可以完全用一
我需要对可变数量的集合的笛卡尔积求和。假设 f[...] 是一个多元函数,定义 p[A__set] := Module[{Alist, args, iterators,it}, Alist =
当鼠标光标在 Wolfram|Alpha 中的 2D 绘图上时,会出现一对灰线,帮助您读取 x 和 y 轴的坐标 . For example ,我将鼠标悬停在以下 Airy 函数图中的转折点之一上。
我正在 Mathematica 中生成一个双面板图形。底部面板在 y 轴上具有负值,这会导致该轴上的标签(使用 FrameLabel 生成)比顶部面板上的标签向左对齐,后者具有正值。我无法将面板连接到
我有几个在 Mathematica 中生成的表达式,我想将它们导出到外部 C 程序的源代码中。 “CForm”几乎可以满足我的要求,只是求幂表示为对 Power() 的调用。 .我的表达式只涉及小幂,
Wolfram 系统建模器有一个名为 "equation browser" 的函数, youtube 视频 here (at 20:58) 介绍了“方程浏览器”,我想知道Dymola是否有相同的功能,
我有适用于 Mac 的 Mathematica 8.0 和 Wolfram Workbench 2.0。我想使用 MUnit 对我正在创建的包进行单元测试,但我发现缺少有关 MUnit 的文档令人沮丧
我希望能够通过具有大量内存的计算机的命令行来处理 Wolfram 语言。这似乎很容易通过 GCP 实现。我会创建一个大实例,根据需要使用它,然后删除该实例。我很好奇,我将如何在 GCP 上安装和设置
给定字符串中符号的名称,如何多次为其赋值?例如,假设我想定义一个名称为 varname 的值的符号,并且我想为它分配一个值: varname = "foo" Symbol[varname]=5 这是行
我的笔记本中有类似以下内容。 test1[g_] := (g == 5); test2[g_] := (g == 6); tests={"test1", "test2"} ToExpression[#
我正在尝试学习一些 Julia,在阅读了几个小时的手册后,我编写了以下代码: ie = 200; ez = zeros(ie + 1); hy = zeros(ie); fdtd1d (steps)=
不确定我正在尝试做的事情是否有意义。我正在用mathematica 对一些代码进行原型(prototype)设计,有一天我希望用C++ 编写。我只能以 double 计算的环境(因为我使用的是 MS
我经常希望看到不在 FullForm 中的 Mathematica 图形对象的内部表示。但更具可读性 InputForm能够通过双击选择部分代码,并轻松将此代码复制到新输入 Cell .但默认Inpu
我是一名优秀的程序员,十分优秀!