小编Dav*_*der的帖子

具有可参数化"零"的稀疏矩阵类

我正在对日志域中的浮点稀疏矩阵进行一些计算,因此"空"条目实际上是-Inf(使用-FLT_MAX).我现在正在使用自定义稀疏矩阵类,但我渴望交换一个现成的替代品.

这是用C++编写的.我倾向于查看Eigen和Boost uBlas中的压缩列矩阵.但是,不清楚是否支持"零"的自定义值(可能由模板参数提供).有没有人有建议?

澄清:

我想要的是:对于之前没有"设置"的任何单元格(i,j),我想mat [i,j]返回-Inf ...所以这可能更好地描述为"默认"稀疏矩阵的"空"条目的值.

我正在使用它来执行HMM递归(Viterbi,sum-product),并保留在日志域中以避免下溢.

我没有做任何矩阵操作......我只是填写一个动态编程画面.我想使用稀疏矩阵类,因为我只填充矩阵的一个带,我希望有效的内存使用.压缩的带状矩阵将提供良好的性能,因为我按顺序填充矩阵.

c++ math boost sparse-matrix eigen

12
推荐指数
1
解决办法
823
查看次数

如何避免以"0"开头的python数字文字被视为八进制?

我正在尝试编写一个小的Python 2.x API来支持获取一个 jobby jobNumber,其中jobNumber提供了一个整数.有时用户提供一个jobNumber以0开头的整数文字,例如037537.(这是因为它们已被R语言所淹没,这是一种明智地考虑的语言037537==37537.)然而,Python认为以"0"开头的整数文字是OCTAL 037537!=37537,而是037537==16223.这让我觉得这是对最小惊喜原则的公然侮辱,幸好看起来这在Python 3中得到了修复---参见PEP 3127.

但我现在仍然坚持使用Python 2.7.所以我的用户这样做:

>>> fetchJob(037537)
Run Code Online (Sandbox Code Playgroud)

并默默地得到错误的工作(16223),或者:

>>> fetchJob(038537)
File "<stdin>", line 1
 fetchJob(038537)
            ^
SyntaxError: invalid token
Run Code Online (Sandbox Code Playgroud)

Python拒绝八进制不兼容的数字.

似乎没有提供任何东西__future__以允许我获得Py3K行为---它必须以某种方式内置到Python,因为它至少需要更改词法分析器.

是否有人知道如何保护我的用户在这种情况下做错工作?目前,我能想到的最好的方法是更改​​该API,以便它采用字符串而不是int.

python octal pep

11
推荐指数
1
解决办法
1505
查看次数

boost 图库:in_e​​dges 迭代的确定性顺序?

TL; DR:我非常希望in_edges 图上的迭代顺序(adjacency_list带有 edge_list of setS)是确定性的,但据我所知,迭代顺序是由一个比较运算符决定的,它只是指针比较---因此迭代顺序由 的变幻莫测决定 malloc。帮助!

为了具体起见,我的图表和相关类型是:

struct VertexCargo { int Id; ... };

typedef adjacency_list<setS, vecS, bidirectionalS, property<vertex_info_t, VertexCargo> > Graph;

typedef graph_traits<Graph>::edge_descriptor   ED;
typedef graph_traits<Graph>::vertex_descriptor VD;
Run Code Online (Sandbox Code Playgroud)

我的逻辑,以防有人在任何地方发现谬误:

  1. in_edges 迭代直接由边列表容器的迭代决定

  2. setS隐含底层容器的边缘列表std::set<edge_desc_impl> 注意:这个假设是不正确的;它实际上是一个std::set<StoredEdge,它提供了一个比较边缘目标的比较器。

  3. std::set<edge_desc_impl> 迭代顺序由 operator<(edge_desc_impl, edge_desc_impl)

  4. operator<(edge_desc_impl, edge_desc_impl)最终只是一个指针比较

operator< 在boost/graph/detail/edge.hpp(boost 1.58) 中定义:

30      template <typename Directed, typename Vertex>
31      class edge_desc_impl  : public edge_base<Directed,Vertex> {

...

35        typedef void                              property_type;
36
37 …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-graph

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

标签 统计

boost ×2

c++ ×2

boost-graph ×1

eigen ×1

math ×1

octal ×1

pep ×1

python ×1

sparse-matrix ×1