标签: data-representation

为什么将数据重构为新类型可以加速我的 haskell 程序?

我有一个程序,它遍历一个表达式树,该树对概率分布进行代数,采样或计算结果分布。

\n

我有两种计算分布的实现:一种 ( computeDistribution) 可以很好地与 monad 转换器重用,另一种 ( simpleDistribution) 我用手将所有内容具体化。我不想手动具体化所有内容,因为这将是采样和计算代码之间的代码重复。

\n

我还有两种数据表示形式:

\n
type Measure a = [(a, Rational)]\n-- data Distribution a = Distribution (Measure a) deriving Show\nnewtype Distribution a = Distribution (Measure a) deriving Show\n
Run Code Online (Sandbox Code Playgroud)\n

当我使用data带有可重用代码的版本时,计算 20d2 ( ) 的分布ghc -O3 program.hs; time ./program 20 > /dev/null大约需要一秒钟,这似乎太长了。选择更高的值n需要您自担风险。

\n

当我使用手工具体化代码,或者使用newtype任一实现的表示时,计算 20d2 ( time ./program 20 s > /dev/null) 只需眨眼的时间。

\n

为什么?

\n

我怎样才能找出原因?

\n

我对 …

performance haskell algebraic-data-types data-representation newtype

7
推荐指数
1
解决办法
209
查看次数

Pygraphviz/networkx设置节点级别或层

我有一个代表一种家谱树的数据集.每个节点有2个父母(第一代除外,他们没有父母).对于给定节点,其父节点可以来自任何前一代节点.例如,生成n中的节点可以具有n-1中的父节点和n-5中的另一个父节点.节点可以是其他几个节点的父节点.

基本上,对于每个节点,我都知道它的生成及其父节点.

我试图表示这个图表保持同一行中的同一代的节点.每一代都有10个节点,第一代除外.

到目前为止,我正在尝试"点"布局.当我只输入两代时它做得很好,但是当我输入3代时,它"太聪明"了,并以某种方式重新排列节点.

例如,以下数据代表3代:

[(的ObjectId( '530b2ad783a1a15e695c9711'),的ObjectId( '530b804883a1a15e695c972b')),(的ObjectId( '530b2ad783a1a15e695c971c'),的ObjectId( '530b804883a1a15e695c972b')),(的ObjectId( '530b2ad783a1a15e695c9709'),的ObjectId( '530b804883a1a15e695c9727')),(的ObjectId( '530b2ad783a1a15e695c970a'),的ObjectId( '530b804883a1a15e695c9727')),(的ObjectId( '530b2ad783a1a15e695c970b'),的ObjectId( '530b804883a1a15e695c9724')),(的ObjectId( '530b2ad783a1a15e695c970f'),的ObjectId( '530b804883a1a15e695c9724')),(的ObjectId( '530b2ad783a1a15e695c9714'),的ObjectId( '530b804883a1a15e695c9729')),(的ObjectId( '530b2ad783a1a15e695c970e'),的ObjectId( '530b804883a1a15e695c9729')),(的ObjectId( '530b2ad783a1a15e695c9711'),的ObjectId( '530b804883a1a15e695c9723')),(的ObjectId('530b2ad783a1a15e695c970e '),的ObjectId(' 530b804883a1a15e695c9723 ')),(的ObjectId(' 530b2ad783a1a15e695c971c '),的ObjectId(' 530b804883a1a15e695c9728 ')),(的ObjectId(' 530b2ad783a1a15e695c9719 '),的ObjectId(' 530b804883a1a15e695c9728 ')),(的ObjectId(' 530b2ad783a1a15e695c9714' ) ,ObjectId('530b804883a1a1 5e695c9726 ')),(的ObjectId(' 530b2ad783a1a15e695c9713 '),的ObjectId(' 530b804883a1a15e695c9726 ')),(的ObjectId(' 530b2ad783a1a15e695c9716 '),的ObjectId(' 530b804883a1a15e695c9722 ')),(的ObjectId(' 530b2ad783a1a15e695c9719 '),的ObjectId(' 530b804883a1a15e695c9722' )),(的ObjectId( '530b2ad783a1a15e695c970d'),的ObjectId( '530b804883a1a15e695c9725')),(的ObjectId( '530b2ad783a1a15e695c9715'),的ObjectId( '530b804883a1a15e695c9725')),(的ObjectId( '530b804883a1a15e695c9724'),的ObjectId( '530ba27c83a1a15e695c972d')) ,(的ObjectId( '530b2ad783a1a15e695c9713'),的ObjectId( '530ba27c83a1a15e695c972d')),(的ObjectId( '530b804883a1a15e695c9724'),的ObjectId( '530ba27c83a1a15e695c972e')),(的ObjectId( '530b2ad783a1a15e695c9709'),的ObjectId( '530ba27c83a1a15e695c972e')),(的ObjectId( '530b804883a1a15e695c9727'),的ObjectId( '530ba27c83a1a15e695c972f')),(的ObjectId( '530b2ad783a1a15e695c9709'),的ObjectId( '530ba27c83a1a15e695c972f')),(的ObjectId( '530b2ad783a1a15e695c9713'),的ObjectId( '530ba27c83a1a15e695c9730')),(的ObjectId( '530b2ad783a1a15e695c9709'),ObjectId(' 530ba27c83a1a15e695c9730 ')),(的ObjectId(' 530b2ad783a1a15e695c9713 '),的ObjectId(' 530ba27c83a1a15e695c9731 ')),(的ObjectId(' 530b804883a1a15e695c9725 '),的ObjectId(' …

python graphviz data-representation networkx pygraphviz

6
推荐指数
2
解决办法
3962
查看次数

为什么Octave比0'更早?

语境:

在Octave中,我编写了一个Sigmoid函数的代码,该函数返回0到1之间的值; 在一个理想的世界中,它只会为-Inf返回0而对于+ Inf只返回1,但由于浮点不精确,非常接近这些值的值都是四舍五入的.

问题:

我的问题是为什么会发生以下情况:对于0和1,舍入的边界明显不同:

>> sigmoid(-709)
ans =   1.2168e-308
>> sigmoid(-710)
ans = 0
>> sigmoid(36)
ans =  1.00000
>> sigmoid(37)
ans =  1
>> (sigmoid(37)-1)==0
ans = 1
>> (sigmoid(36)-1)==0
ans = 0
>> sigmoid(-710)==0
ans = 1
>> sigmoid(-709)==0
ans = 0
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我们可以看到将输出舍入到1所需的值在数量上要小于舍入到0所需的值.37与-710相比是一个非常大的差异,因为它们的大小应该相同但是相反的迹象......

我的代码:

也许这是我的功能问题:

function [z] = sigmoid(x)
z = 1.0 ./(1.0+exp(-x));
endfunction
Run Code Online (Sandbox Code Playgroud)

我试过的:

另一点是,我改变了函数,将结果加1(基本上将图形翻译为1),边界分别变为+/- 37,分别为2和1 - 这让我觉得它真的与0有关特别是,而不仅仅是功能及其下限.

如果它与我的电脑有关,那会是什么导致这样的事情?

floating-point rounding octave data-representation

6
推荐指数
1
解决办法
130
查看次数

如何检查 int 变量是否包含合法(非陷阱表示)值?

语境:

这主要是对另一个问题的跟进。OP 想猜测一个变量是否包含一个 int 值,我的第一个想法是在 C 中(如在 C++ 中)一个 int 变量只能包含一个 int 值。Eric Postpischil 提醒我,对于 int 类型,每个标准都允许使用陷阱表示......

当然,我知道大多数现代系统只使用整数的 2 补码表示,没有填充位,这意味着无法观察到陷阱表示。尽管如此,这两个标准似乎仍然允许有符号类型的 3 种表示形式:符号和幅度、一个补码和二进制补码。并且至少 C18 草案(n2310 6.2.6 类型表示)明确允许填充除字符以外的整数类型的位。

因此,在可能的填充位或非二进制补码符号表示的上下文中,int变量可能包含符合实现的陷阱值。有没有可靠的方法来确保 int 变量包含有效值?

c++ integer data-representation language-lawyer bit-representation

6
推荐指数
1
解决办法
174
查看次数

什么是 S 表达式

所有 Lisp 开发人员似乎都知道什么是 S 表达式。但有人能为非 Lisp 开发者解释一下这一点吗?

已经有一个维基百科条目(https://en.wikipedia.org/wiki/S-expression)。但如果您不想深入了解细节,那么这并没有多大帮助。

什么是 S 表达式?我可以用 S-Expression 表达什么?Lisp 通常使用 S 表达式的目的是什么?S 表达式只与 Lisp 开发人员相关吗?

lisp representation data-representation s-expression

6
推荐指数
2
解决办法
3781
查看次数

r中约10个因子共存的饼图

我有一个包含大约30000个簇的两列数据集和10个这样的因子:

cluster-1 Factor1
cluster-1 Factor2
...
cluster-2 Factor2
cluster-2 Factor3
...
Run Code Online (Sandbox Code Playgroud)

我想代表集群中的因素共同出现.像"因子1 +因子3 +因子5在1234簇"中的东西,等等,用于不同的组合.我以为我可以像饼图一样,但有10个因素,我认为可能有太多的组合.

什么是代表这个的好方法?

grouping r data-representation

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

星期中是否有单个字符的约定?

一周中的某几天是否有英文(或特定于程序员的)单个字符约定,如果有的话,这是什么?我意识到这可能是一个英语问题,但我认为它对程序员具有特殊意义。

也许像:

Monday    Mon  MO  M
Tuesday   Tue  TU  T
Wednesday Wed  WE  W
Thursday  Thu  TH  U
Friday    Fri  FR  F
Saturday  Sat  SA  S
Sunday    Sun  SU  N
Run Code Online (Sandbox Code Playgroud)

abbreviation dayofweek data-representation

5
推荐指数
2
解决办法
1568
查看次数

如何摆脱字符串表示周围的单引号?

此示例代码打印文件中一行的表示.它允许'\n'在一行中查看其内容,包括控制字符,因此我们将其称为行的"原始"输出.

print("%r" % (self.f.readline()))
Run Code Online (Sandbox Code Playgroud)

但是,输出显示的'是每个末尾添加的字符不在文件中.

'line of content\n'

如何摆脱输出周围的单引号?
(Python 2.7和3.6中的行为相同.)

python data-representation

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

什么是二进制数据?

gcc 4.6.0

二进制数据是什么样的?是1还是0.

我只是想知道,因为我正在和另一位程序员谈论复制字符串和二进制数据.

通常,我使用strcpy/strncpy函数来复制字符串,使用memcpy/memmove来复制二进制数据.但是,我只是想知道它是什么样的?

非常感谢任何建议,

c binary-data data-representation

4
推荐指数
3
解决办法
9133
查看次数

浮点数和整数的Erlang二进制表示,差异?

得到了另一个Erlang二进制表示查询('这就是我现在正在阅读的内容,并且需要二进制协议实现).

如果我正确理解了类型说明符,那么,对于"float"类型值,8字节表示看起来很好(这是在64位Win7上).

1> <<A1/binary>> = <<12.3214/float>>.
<<64,40,164,142,138,113,222,106>>
Run Code Online (Sandbox Code Playgroud)

然而令我难过的是,"整数"类型值的二进制表示.

2> <<A2/binary>> = <<32512/integer>>.
<<0>>
3> <<A3/binary>> = <<232512518/integer>>.
<<6>>
4> <<A5/binary>> = <<80/integer>>.
<<"P">>
Run Code Online (Sandbox Code Playgroud)

为什么所有这些都用1个字节表示?有人可以解释一下吗?

binary erlang types data-representation

3
推荐指数
1
解决办法
1853
查看次数