小编gil*_*esc的帖子

Mongo复杂排序?

我知道如何通过多个字段对MongoDB中的查询进行排序,例如db.coll.find().sort({a:1,b:-1}).

我可以使用用户定义的函数进行排序; 例如,假设a和b是整数,由a和b之间的差异(a-b)

谢谢!

mongodb

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

Clojure中的变量范围+ eval

在Clojure,

(def x 3)
(eval '(prn x))
Run Code Online (Sandbox Code Playgroud)

打印3,而

(let [y 3]
   (eval '(prn y)))
Run Code Online (Sandbox Code Playgroud)

(binding [z 3] (eval '(prn z)))
Run Code Online (Sandbox Code Playgroud)

生成'无法解析var'异常.

http://clojure.org/evaluation,eval,load-string,等生成临时命名空间来评估它们的内容.因此,我希望上述代码示例都不起作用,因为(def x 3)它是在我当前的命名空间中完成的,而不是由当前命名空间创建的eval.

  1. 为什么第一个代码示例工作而不是后两个?
  2. 如何eval使用绑定变量的表单而不使用def

谢谢!

binding eval clojure let

18
推荐指数
1
解决办法
2957
查看次数

Scipy稀疏三角矩阵?

我正在使用Scipy构建一个大的,稀疏的(250k X 250k)共生矩阵scipy.sparse.lil_matrix.共生矩阵是三角形; 也就是说,M [i,j] == M [j,i].由于将所有数据存储两次是非常低效的(在我的情况下,不可能),我当前正在坐标(i,j)处存储数据,其中i总是小于j.换句话说,我有一个存储在(2,3)的值,没有值存储在(3,2),即使我的模型中的(3,2)应该等于(2,3).(参见下面的矩阵示例)

我的问题是我需要能够随机提取与给定索引相对应的数据,但是,至少我正在做的方式,一半数据在行中,一半在列中,就像这样:

M = 
    [1 2 3 4
     0 5 6 7
     0 0 8 9
     0 0 0 10]
Run Code Online (Sandbox Code Playgroud)

所以,考虑到上面的矩阵,我希望能够做一个类似的查询M[1],然后回来[2,5,6,7].我有两个问题:

1)有没有比首先查询行,然后是列,然后连接两个更有效(最好是内置)的方法呢?这很糟糕,因为无论我使用CSC(基于列)还是CSR(基于行)内部表示,两个查询之一效率都非常低.

2)我甚至使用Scipy的正确部分?我在Scipy库中看到了一些提到三角矩阵的函数,但它们似乎围绕从完整矩阵中获取三角矩阵.在我的情况下,(我认为)我已经有了一个三角矩阵,并且想要操纵它.

非常感谢.

python matrix scipy

8
推荐指数
1
解决办法
2885
查看次数

core.logic lvars上的算术和clojure函数

两个相关问题合二为一:

Clojure的core.logic模块可以执行算术,逻辑比较等,就像普通的Prolog一样吗?我想象的是以下内容:

(defrel points person n) 
(fact :bob 2)
(fact :charlie 3)
(run* [q] (fresh [x y] 
   (points :bob x) 
   (points :charlie y) 
   (< x y) 
   (== q (+ x y))))

=> (5)
Run Code Online (Sandbox Code Playgroud)

在此示例中,逻辑比较(< x y)和q的尝试绑定都不起作用(+ x y).我想这是因为我正在使用LVars,而不是整数,我不能进行这些比较,因为符号尚未绑定.但它适用于prolog:

points(bob, 2).
points(charlie, 3).
?- points(bob, X), points(charlie, Y), Result is X + Y.

=> Result = 5.
Run Code Online (Sandbox Code Playgroud)

在类似的情况下,我可以以某种方式使用Clojure函数(返回布尔值或其他"truthy"值)作为逻辑谓词吗?换句话说,使用函数告诉Minikanren哪些术语统一与否.有点像:

(defmagic startswithhi-o [v]
  (.startsWith v "hi"))
(defrel person n)
(fact person "bob")
(fact person "hillary")
(run* [q] …
Run Code Online (Sandbox Code Playgroud)

logic clojure prolog

8
推荐指数
1
解决办法
1195
查看次数

在C++中跨文件行并行化函数的惯用方法

我发现自己经常编写以下形式的C++代码:

while (getline(strm, line)) {
    cout << computationally_intensive_function(line) << endl;
}
Run Code Online (Sandbox Code Playgroud)

我想并行化这段代码.到目前为止,我提出的最佳解决方案是构建字符串向量以容纳大量(10000-100000)行数,然后在此向量上并行化

#pragma omp parallel for
Run Code Online (Sandbox Code Playgroud)

然后清空矢量并在线条保留时重复.但是,此方法需要大量内存,而其他内核处于空闲状态,而主进程则缓冲字符串.有没有更好的办法?像Python multiprocessing.Pool.map或Hadoop之类的东西?(我想避免使用Hadoop的C++ API,因为Hadoop相当重量级,可能无法在我的代码运行的任何地方安装.)

c++ multithreading openmp

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

标签 统计

clojure ×2

binding ×1

c++ ×1

eval ×1

let ×1

logic ×1

matrix ×1

mongodb ×1

multithreading ×1

openmp ×1

prolog ×1

python ×1

scipy ×1