小编zoo*_*zoo的帖子

matplotlib中的小散点图标记总是黑色的

我正在尝试使用matplotlib制作一个灰度非常小的散点图.由于点密度,点数需要很小.问题是scatter()函数的标记似乎同时具有直线和填充.当标记很小时,只有线条可见,而不是填充,线条不是正确的颜色(它总是黑色).

我可以使用gnuplot获得我想要的内容:使用点pt 0 lc rgb'gray'绘制'nodes'

如何使用matplotlib scatterplot()制作非常小的灰点?

matplotlib

54
推荐指数
3
解决办法
6万
查看次数

何时使用Haskell monad

我正在Haskell中实现一个组合优化算法:

Given an initial candidate solution, repeat until stopping criteria are met:

  1. Determine possible moves
  2. Evaluate possible moves
  3. Choose a move
  4. Make move, record new candidate solution, update search state
Run Code Online (Sandbox Code Playgroud)

我可以编写步骤1-4的函数,并在递归函数中将它们链接在一起,以处理循环并将状态从一次迭代传递到下一次迭代,但我有一个模糊的想法,即monads适用.

在Haskell中表达这种过程的最佳方法是什么?

monads haskell

20
推荐指数
2
解决办法
1860
查看次数

Haskell中的随机数生成器是线程安全的吗?

所有线程共享相同的"全局随机数生成器",还是每个线程都有自己的?

如果共享一个,我如何确保线程安全?在Real World Haskell"Monads"一章中描述的使用getStdGensetStdGen的方法看起来并不安全.

如果每个线程都有一个独立的发生器,那么快速连续启动的两个线程的发生器会有不同的种子吗?(例如,如果种子是以秒为单位的时间,它们将不会,但毫秒可能没​​问题.我不知道如何从Data.Time获得毫秒分辨率的时间.)

random multithreading haskell thread-safety

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

非决定论的来源

我所谓的确定性程序会在不同的运行中产生一些略有不同的输出.输入,编译器和计算机是不变的.我不确定哪个输出是正确的,因为它看起来总是合理的.

除了对rand()的迷路调用之外,怎么可能呢?

c++ random deterministic non-deterministic

10
推荐指数
5
解决办法
2657
查看次数

使用Haskell的类型系统实现正确的抽象

我在优雅地使用Haskell的类型系统时遇到了麻烦.我确定我的问题很常见,但除了特定于我的程序的术语外,我不知道如何描述它.

我试图表达的概念是:

  • 数据点,每个数据点采用多种形式之一,例如(id,个案数,控件数),(id,个案数,人口数)

  • 数据点和集合信息的集合:(一组id,总案例,总控件),具有添加/删除点的功能(因此对于每种不同的点,都有相应的各种集合)

我可以有一类点类型,并将各种点定义为自己的类型.或者,我可以为每个品种提供一种点类型和不同的数据构造函数.同样对于点集.

我对每种方法都至少有一个问题:

  • 使用类型类:避免函数名称冲突会很烦人.例如,两种类型的点都可以使用函数来提取"案例数",但类型类不能要求此函数,因为某些其他点类型可能没有案例.

  • 没有类型类:我宁愿不从Point模块导出数据构造函数(提供其他更安全的函数来创建新值).如果没有数据构造函数,我将无法确定给定Point值的变化.

什么样的设计可以帮助减少这些(和其他)问题?

haskell types functional-programming

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

Dijkstra算法实现的性能

下面是我从维基百科文章中的伪代码编写的Dijkstra算法的实现.对于具有大约40 000个节点和80 000个边缘的图形,运行需要3或4分钟.那是不是正确的数量级?如果没有,我的实施有什么问题?

struct DijkstraVertex {
  int index;
  vector<int> adj;
  vector<double> weights;
  double dist;
  int prev;
  bool opt;
  DijkstraVertex(int vertexIndex, vector<int> adjacentVertices, vector<double> edgeWeights) {
    index = vertexIndex;
    adj = adjacentVertices;
    weights = edgeWeights;
    dist = numeric_limits<double>::infinity();
    prev = -1; // "undefined" node
    opt = false; // unoptimized node
   }
};

void dijsktra(vector<DijkstraVertex*> graph, int source, vector<double> &dist, vector<int> &prev) {
  vector<DijkstraVertex*> Q(G); // set of unoptimized nodes
  G[source]->dist = 0;
  while (!Q.empty()) {
    sort(Q.begin(), Q.end(), dijkstraDistComp); // …
Run Code Online (Sandbox Code Playgroud)

c++ performance implementation dijkstra

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

"将"多边形"拼凑在一起

我有一组代表行政区的多边形.这些区域是手工数字化的,多边形应该接触的多边形之间有很小的空间.可能还有重叠的多边形.如何将多边形拼接在一起,填补间隙并消除重叠?

首选QGIS/ArcGIS或Python库解决方案(但欢迎使用算法建议)

gis geometry polygons

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

从Emacs编译Latex时停止打开tex-shell

当我从Emacs编译Latex时,如何防止打开*tex-shell*缓冲区?它将窗口分成两半,我总是只使用Cx 1来立即摆脱它.

解决方案可能与

(setq special-display-buffer-names ("*tex-shell*"))
Run Code Online (Sandbox Code Playgroud)

这使得新缓冲区占据整个帧而不是一半(不是我想要的).

我尝试了以下内容,但它对Latex没有影响:

(defadvice compilation-start
    (around inhidbit-display (command &optional mode name-function highlight-regexp))
    (flet (display-buffer) (fset 'display-buffer 'ignore) ad-do-it))
(ad-activate 'compilation-start)
(ad-deactivate 'compilation-start)
Run Code Online (Sandbox Code Playgroud)

emacs latex elisp dot-emacs

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

外部存储器数据结构替换地图矢量

我正在流网络上进行迭代计算,在此期间我需要记录每个源对每个边缘流量的贡献.任何一条边上的流量都是平均来源的2%,所以我定义vector< map<int, double> > flow,这flow[e][s] = f意味着e源边缘的流量sf.在每次迭代,每次fflow得到更新.

该程序的峰值内存使用量接近4 GB.这适用于(32位)Linux和OS X,但它在Windows上崩溃(似乎每个进程限制2 GB).

如何使用vector< map<int, double> >接口实现基于磁盘的数据结构(或以其他方式解决此问题)?

c++ memory algorithm stl data-structures

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

将图形划分为连接的子图,其中的顶点集必须位于同一子图中

我有一个连通的,无向图G =(V,E),一个集S = {S_1,S_2,...,S_n},其中每个S_i是V的子集,ak> 1.如何将V划分为k子集,以保证:

  1. 对于每个i,S_i中的每个节点都在同一子集中
  2. 每个子集代表G的连通子图?

algorithm graph

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