小编Sza*_*lcs的帖子

Wine上的可执行文件运行速度比Windows快 - 为什么?

解决方案:显然,罪魁祸首是使用floor(),其性能在glibc中依赖于操作系统.


这是前一个问题的后续问题:Linux上的程序速度比Windows快 - 为什么?

我有一个小的C++程序,当用nuwen gcc 4.6.1编译时,在Wine上比在Windows XP上运行得快得多(在同一台计算机上).问题:为什么会发生这种情况?

Wine和Windows的时间分别为~15.8和25.9秒.请注意,我在谈论相同的可执行文件,而不仅仅是相同的C++程序.

源代码在帖子的末尾.编译后的可执行文件在这里(如果你足够信任我).

这个特殊的程序没有任何用处,它只是一个最小的例子,从我有一个更大的程序.请参阅另一个问题,以获得原始程序的一些更精确的基准测试(重要!!)和最常见的可能性排除(例如其他程序在Windows上占用CPU,处理启动损失,系统调用的差异,如内存分配) .另请注意,虽然我在这里使用的rand()是简单,但在原版中我使用了自己的RNG,我知道它没有堆分配.

我在这个主题上提出一个新问题的原因是,现在我可以发布一个实际的简化代码示例来重现这个现象.

代码:

#include <cstdlib>
#include <cmath>


int irand(int top) {
    return int(std::floor((std::rand() / (RAND_MAX + 1.0)) * top));
}

template<typename T>
class Vector {
    T *vec;
    const int sz;

public:
    Vector(int n) : sz(n) {
        vec = new T[sz];
    }

    ~Vector() {
        delete [] vec;
    }

    int size() const { return sz; }

    const …
Run Code Online (Sandbox Code Playgroud)

c++ linux windows performance benchmarking

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

如何从命令行评估笔记本?

我们如何从命令行评估Mathematica笔记本(即在命令行模式下运行内核时)?

假设我们正在使用远程计算机.我知道有可能将笔记本转换为m文件,并对其进行评估,但我很好奇是否有可能直接使用笔记本进行此操作.


这是我到目前为止:

首先,我们需要在远程Linux机器上启动无头X服务器,因此前端可以在那里运行(并打开笔记本电脑).如果您正在使用本地计算机,请跳过此步骤.

Xvfb :1 &
export DISPLAY=:1
Run Code Online (Sandbox Code Playgroud)

在此之后我开始使用Mathematica内核(math)并执行以下操作.

这是必要的,UsingFrontEnd因为打开笔记本需要一个前端.test.nb有一个包含的输入单元格a=1.

In[1]:= nb=UsingFrontEnd@NotebookOpen["test.nb"]

Out[1]= -NotebookObject-
Run Code Online (Sandbox Code Playgroud)

在尝试评估笔记本之后,显然我得到了一个对话框,我需要Return[]用来返回.我不确定为什么输入行从1再次开始计数(前端启动了一个新内核?)注意,a没有获得值.

In[2]:= UsingFrontEnd@NotebookEvaluate[nb]

 In[1]:= a

 Out[1]= a

 In[2]:= Return[]

Out[2]= a
Run Code Online (Sandbox Code Playgroud)

从对话框返回后,a仍然没有值.

In[3]:= a

Out[3]= a
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica mathematica-frontend

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

让Mathematica前端服从FontFamily选项

说到汉字,我无法让Mathematica的前端使用我选择的字体.如何让它使用我需要的字体?

在这里,我提供两个屏幕截图来显示问题,一个来自Word(顶部),另一个来自WinXP上的Mathematica,两者都显示相同的字符串.请注意,Mathematica使用了几种不同的字体(我猜它首先尝试使用的字体不包含字形时使用字体替换 - 但是我指定的字体包含我需要的所有字形!).在这里,我使用Win7附带的字体Microsoft YaHei,但也可以下载到XP.

编辑: 这是一些测试代码:

str = "????????????????????????????????????????????????????????????"

Style[str, Large, FontFamily -> "SimSun"]
Run Code Online (Sandbox Code Playgroud)

(SimSun附带XP,并且应该包含所有这些字符,但不确定是否在所有版本中.)

编辑2:我在Windows XP上(启用了东亚语言支持),我想知道其他操作系统的结果是否不同.

Word中的字体 Mathematica中的字体


简介: 看起来行为取决于特定的操作系统和安装的字体,不幸的是,似乎没有办法使字体统一(即使存在包含所有字形的单个字体).

fonts wolfram-mathematica mathematica-frontend

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

如何使用一对FrameLabels制作一个图形网格?

创建绘图的行/列/网格的最简单方法是什么,整个网格具有单个FrameLabel?

我需要类似的东西:

p := ListPlot[RandomInteger[10, 5], Joined -> True, Axes -> False, 
  Frame -> True, PlotRange -> {0, 11}, 
  FrameLabel -> {"horizontal", None}, AspectRatio -> 1]

GraphicsRow[{Show[p, FrameLabel -> {"horizontal", "vertical"}], p, p}]
Run Code Online (Sandbox Code Playgroud)

对于行格式,它可以有一个或多个水平标签,但只有一个垂直标签.

需要考虑的问题:

  • 垂直刻度必须与所有绘图匹配,并且不得因例如太长的标签或自动破坏PlotRangePadding.
  • 需要良好(并且可以调整大小!)对绘图间距的控制(毕竟,这是删除冗余标签的动机之一)
  • 一般空间效率的安排.最大内容,最小(不必要)空格.

编辑

我正在努力能够稳健地创建打印就绪数字,这需要大量调整大小.(因为导出的PDF通常与我在笔记本中看到的比例不同,并且必须具有可读但不超大的字体)

plot wolfram-mathematica levelscheme

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

mathematica函数中的多个语句

我想知道,如何评估Mathematica中函数中的多个语句.
例如

f[x_]:=x=x+5 and then return x^2
Run Code Online (Sandbox Code Playgroud)

我知道这可以修改为,(x+5)^2但最初我想从函数中的文件中读取数据并在执行一些数据操作后打印结果.

wolfram-mathematica

15
推荐指数
3
解决办法
2万
查看次数

通过将PDF转换为轮廓形状替换PDF中的所有字体字形

我正在寻找一种方法来"概述" PDF文件中所有文本/字体,即将它们转换为曲线.

我更愿意这样做而无需将PDF转换为PostScript并返回.此外,我想使用可以从命令行自动执行的免费轻量级跨平台工具,例如Ghostscript或MuPDF.

pdf fonts pdf-generation ghostscript mupdf

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

在Mathematica中读取UTF-8编码的文本文件

如何在Mathematica中读取utf-8编码的文本文件?

这就是我现在正在做的事情:

text = Import["charData.txt", "Text", CharacterEncoding -> "UTF8"];
Run Code Online (Sandbox Code Playgroud)

但它告诉我

$CharacterEncoding::utf8: "The byte sequence {240} could not be interpreted as a character in the UTF-8 character encoding"
Run Code Online (Sandbox Code Playgroud)

等等.我不知道为什么.我相信该文件是有效的utf-8.

这是我正在尝试阅读的文件:

http://dl.dropbox.com/u/38623/charData.txt

wolfram-mathematica

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

Matlab数据默认停靠

在Matlab中,可以将图形窗口停靠在主窗口中.如果有多个数字,则每个数字都显示在不同的"标签"中.

是否可以设置系统以便默认创建所有图形窗口?

matlab matlab-figure

14
推荐指数
1
解决办法
2万
查看次数

检查列表是函数参数中的数字列表的推荐方法是什么?

我一直在研究检查函数参数的方法.我注意到 MatrixQ有2个参数,第二个是应用于每个元素的测试.

ListQ只需要一个论点.(也出于某种原因,?ListQ没有帮助页面,就像?MatrixQ那样).

因此,例如,为了检查函数的参数是否为数字矩阵,我写道

ClearAll[foo]
foo[a_?(MatrixQ[#, NumberQ] &)] := Module[{}, a + 1]
Run Code Online (Sandbox Code Playgroud)

为List做同样的事情会是什么好方法?以下仅检查输入是否为List

ClearAll[foo]
foo[a_?(ListQ[#] &)] := Module[{}, a + 1]
Run Code Online (Sandbox Code Playgroud)

我可以这样做:

ClearAll[foo]
foo[a_?(ListQ[#] && (And @@ Map[NumberQ[#] &, # ]) &)] := Module[{}, a + 1]
Run Code Online (Sandbox Code Playgroud)

所以这foo[{1, 2, 3}]将起作用,但foo[{1, 2, x}]不会(假设x是一个符号).但在我看来,这是一个复杂的方式来做到这一点.

问题:您是否知道更好的方法来检查参数是否为列表,并检查列表内容是否为Numbers(或Mathematica已知的任何其他头?)

还有一个相关问题:在每个参数中添加此类检查会产生哪些主要的运行时性能问题?如果是这样,您是否建议在测试和开发完成后删除这些检查,以便最终程序运行得更快?(例如,有一个包含所有检查的代码版本,用于开发/测试,以及没有用于生产的版本).

wolfram-mathematica

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

在Mathematica中洗牌

什么是最好/最简单的方法来改变Mathematica中的长名单?

wolfram-mathematica shuffle

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