小编dzh*_*lil的帖子

从C数组初始化ublas向量

我正在使用C++ ublas库编写一个Matlab扩展,我希望能够从Matlab插件传递的C数组中初始化我的ublas向量.如何在没有(为了提高效率)显式复制数据的情况下从C数组初始化ublas向量.我正在寻找以下代码行:

using namespace boost::numeric::ublas;

int pv[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
vector<int> v (pv);
Run Code Online (Sandbox Code Playgroud)

通常,是否可以std::vector从数组初始化C++ ?像这样的东西:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int pv[4] = { 4, 4, 4, 4};
    vector<int> v (pv, pv+4);

    pv[0] = 0;
    cout << "v[0]=" << v[0] << " " << "pv[0]=" << pv[0] << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但初始化不会复制数据.在这种情况下输出是

v[0]=4 pv[0]=0
Run Code Online (Sandbox Code Playgroud)

但我希望输出相同,更新C数组会更改C++向量指向的数据

v[0]=0 pv[0]=0
Run Code Online (Sandbox Code Playgroud)

c++ matlab vector ublas

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

numpy与mlabwrap的matlab接口

我正在寻找一种简单的方法来在numpy中可视化我的一些数据,并且我发现了mlabwrap看起来很有前途的包.我正在尝试创建一个简单的绘图,可以随着数据的变化进行更新.

这是我试图复制的matlab代码

>> h = plot([1,2,3], [1,2,3], '-o');
>> set(h, 'XData', [0,0,0]);
>> drawnow();
Run Code Online (Sandbox Code Playgroud)

到python

>> from mlabwrap import mlab
>> h = mlab.plot([1,2,3], [1,2,3], '-o')
>> mlab.set(h, 'XData', [0,0,0])
>> mlab.drawnow();
Run Code Online (Sandbox Code Playgroud)

但是,倒数第二个命令失败并显示错误消息

error: One or more output arguments not assigned during call to "set".
Run Code Online (Sandbox Code Playgroud)

对于如何解决这个问题,有任何的建议吗?

python matlab interface mlabwrap

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

Vala内存管理

我将从C调用Vala函数,我对内存管理有疑问.该函数在Vala中如下所示:

int[] GetNumbers();
Run Code Online (Sandbox Code Playgroud)

并由valacC 翻译成这样的

gint* GetNumbers(int* result_length1);
Run Code Online (Sandbox Code Playgroud)

当从C调用上述函数时,调用者是否负责释放gint*数组?

c memory-management vala

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

计算python中最大的共同点

如果你有一个python中的整数列表,比如说L = [4,8,12,24],你如何计算它们最大的公分母/除数(在这种情况下为4)?

python integer division

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

在C++中实现等价关系(使用boost :: disjoint_sets)

假设您有许多元素,并且需要跟踪它们之间的等价关系.如果元素A等价于元素B,则它等效于所有其他元素B等价.

我正在寻找一种有效的数据结构来编码这些信息.应该可以通过与现有元素的等价来动态添加新元素,并且从该信息中可以有效地计算新元素等效的所有元素.

例如,考虑以下元素[0,1,2,3,4]的等价集:

0 = 1 = 2
3 = 4
Run Code Online (Sandbox Code Playgroud)

等号表示等价的.现在我们添加一个新元素5

0 = 1 = 2
3 = 4 
5
Run Code Online (Sandbox Code Playgroud)

并强制执行等价5=3,数据结构变为

0 = 1 = 2
3 = 4 = 5
Run Code Online (Sandbox Code Playgroud)

由此,人们应该能够有效地迭代任何元素的等价集.对于5,这个集合将是[3,4,5].

Boost已经提供了一个方便的数据结构disjoint_sets,似乎满足了我的大多数要求.考虑这个简单的程序,说明如何实现上面的例子:

#include <cstdio>
#include <vector>
#include <boost/pending/disjoint_sets.hpp>
#include <boost/unordered/unordered_set.hpp>

/*
    Equivalence relations
    0 = 1 = 2
    3 = 4
 */

int main(int , char* [])
{
    typedef std::vector<int> VecInt;
    typedef boost::unordered_set<int> SetInt;

    VecInt rank (100);
    VecInt parent (100);
    boost::disjoint_sets<int*,int*> ds(&rank[0], &parent[0]); …
Run Code Online (Sandbox Code Playgroud)

boost equivalence-classes disjoint-sets

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

在python中生成函数列表

我有以下python代码生成匿名函数列表:

basis = [ (lambda x: n*x) for n in [0, 1, 2] ]     
print basis[0](1)
Run Code Online (Sandbox Code Playgroud)

我原以为它等同于

basis = [ (lambda x: 0*x), (lambda x: 1*x), (lambda x: 2*x) ]
print basis[0](1)
Run Code Online (Sandbox Code Playgroud)

然而,虽然第二个片段打印出0这是我所期望的,但是第一个打印出2.第一段代码出了什么问题,为什么它没有按预期运行?

python lambda list

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

Numpy:从一维数组构建一个3D数组

假设A给出了一维数组.是否有一种简单的方法来构建一个3D数组B,这样B[i,j,k] = A[k]所有的i,j,k?你可以假设B的形状是规定的那样B.shape[2] = A.shape[0].

arrays numpy

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

鼻子不运行测试

假设您有一个名为A的python软件包,其目录结构如下

A
??? B.py
??? __init__.py
Run Code Online (Sandbox Code Playgroud)

哪里__init__.py是空的,内容B.py

def test_B():
    assert False
Run Code Online (Sandbox Code Playgroud)

上面简单包装上的流鼻涕未通过测试

$ nosetests A

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
Run Code Online (Sandbox Code Playgroud)

一个要跑

$ nosetests A/B.py
Run Code Online (Sandbox Code Playgroud)

为了赶上测试,但是如果A内具有复杂的子模块结构,那很快就会变得笨拙。

如何让鼻子运行程序包A中以“ test”开头的所有功能,而不必指定它们出现的每个文件?

python nose nosetests

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

在 Sympy 中定义符号的范围

在 Sympy 中,可以定义符号可以采用的值的约束

x = symbols('x', real=True)
Run Code Online (Sandbox Code Playgroud)

是否可以说一个符号只能在一定范围内取值-1 < x < 1?我对此感兴趣的原因是因为我试图让 sympy 自动简化表达式,如下所示

expr = sqrt(1+x) * sqrt((1-x)*(1+x)) / sqrt(1-x)
Run Code Online (Sandbox Code Playgroud)

运行simplify(expr)不会产生任何简化,而-1<x<1简化后的结果应该是1+x. 我如何获得 sympy 来简化上面的表达式?

sympy simplify sqrt

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

Numpy 选择惰性版本

考虑下面的代码

 >>> x = np.array([0, 0, 1, 1])
 >>> np.select([x==0, True], [x+1, 1/x])
 array([ 1.,  1.,  1.,  1.])
Run Code Online (Sandbox Code Playgroud)

它有两个问题。

首先,它并不懒惰。它会急切地计算 x+1 和 1/x,即使最终结果中不需要某些计算值。

其次,numpy 每次运行代码时都会发出警告

RuntimeWarning: divide by zero encountered in true_divide
Run Code Online (Sandbox Code Playgroud)

这与上一点有些相关,因为它试图评估 1/x,即使最终答案中不需要这样做。

是否有一个 select 版本是惰性的并且不会遇到上述问题?

python select numpy lazy-evaluation

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