我知道如何通过多个字段对MongoDB中的查询进行排序,例如db.coll.find().sort({a:1,b:-1})
.
我可以使用用户定义的函数进行排序; 例如,假设a和b是整数,由a和b之间的差异(a-b)
?
谢谢!
在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
.
eval
使用绑定变量的表单而不使用def
?谢谢!
我正在使用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库中看到了一些提到三角矩阵的函数,但它们似乎围绕从完整矩阵中获取三角矩阵.在我的情况下,(我认为)我已经有了一个三角矩阵,并且想要操纵它.
非常感谢.
两个相关问题合二为一:
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)
.我想这是因为我正在使用LVar
s,而不是整数,我不能进行这些比较,因为符号尚未绑定.但它适用于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) 我发现自己经常编写以下形式的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相当重量级,可能无法在我的代码运行的任何地方安装.)