我正在使用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) 我正在寻找一种简单的方法来在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)
对于如何解决这个问题,有任何的建议吗?
我将从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*数组?
如果你有一个python中的整数列表,比如说L = [4,8,12,24],你如何计算它们最大的公分母/除数(在这种情况下为4)?
假设您有许多元素,并且需要跟踪它们之间的等价关系.如果元素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) 我有以下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.第一段代码出了什么问题,为什么它没有按预期运行?
假设A给出了一维数组.是否有一种简单的方法来构建一个3D数组B,这样B[i,j,k] = A[k]所有的i,j,k?你可以假设B的形状是规定的那样B.shape[2] = A.shape[0].
假设您有一个名为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”开头的所有功能,而不必指定它们出现的每个文件?
在 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 来简化上面的表达式?
考虑下面的代码
>>> 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 版本是惰性的并且不会遇到上述问题?