小编kch*_*462的帖子

如何将犰狳矩阵转换为向量矢量?

我创建了一个armadillo c ++矩阵,如下所示:

arma::mat A; 
A.zeros(3,4);
Run Code Online (Sandbox Code Playgroud)

我想将它转换为由定义的向量向量

std::vector< std::vector<double> > B(3, std::vector<double>(4) ); 
Run Code Online (Sandbox Code Playgroud)

如何将B设置为A?如果对于矢量矢量没有简单的方法,那么阵列数组呢,即如果我将B定义为什么

double B[3][4]; 
Run Code Online (Sandbox Code Playgroud)

c++ arrays stdvector armadillo

13
推荐指数
1
解决办法
8660
查看次数

如何使用SWIG包装cthon函数,该函数在python中接收函数指针

这是我想要做的简化示例.假设我在test.h中有以下c ++代码

double f(double x);
double myfun(double (*f)(double x));
Run Code Online (Sandbox Code Playgroud)

现在这些功能的作用并不重要.重要的是myfun接受一个函数指针.

在我的接口文件中包含test.h文件后,我使用SWIG编译了一个python模块"test".现在,在Python中,我运行以下命令:

import test
f = test.f
Run Code Online (Sandbox Code Playgroud)

这创建了一个正常工作的函数f,它需要一个双精度函数.但是,当我尝试在python中将"f"传递给myfun时,会发生以下情况:

myfun(f)
TypeError: in method 'myfun', argument 1 of type 'double (*)(double)'
Run Code Online (Sandbox Code Playgroud)

我该如何解决?我想我的SWIG接口文件中需要一个typemap声明,但我不确定正确的语法是什么或放在哪里.我试过了

%typemap double f(double);
Run Code Online (Sandbox Code Playgroud)

但那没用.有任何想法吗?

c++ python swig

10
推荐指数
1
解决办法
4269
查看次数

在armadillo c ++中返回稀疏矩阵的位置和值

如何在Armadillo C++中获得稀疏矩阵的非零位置(索引)和值的数组?

到目前为止,我可以轻松地构造一个稀疏矩阵,其中包含一组位置(作为umat对象)和值(作为vec对象):

// batch insertion of two values at (5, 6) and (9, 9)
umat locations;
locations << 5 << 9 << endr
          << 6 << 9 << endr;

vec values;
values << 1.5 << 3.2 << endr;

sp_mat X(locations, values, 9, 9);
Run Code Online (Sandbox Code Playgroud)

我该如何取回地点?例如,我希望能够做到这样的事情:

umat nonzero_index = X.locations()
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

armadillo

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

如何使用SWIG在python中扩展模板化的c ++类以允许[]运算符

我有一个模板化的c ++数组类,它使用标准的vector类:

#include <vector>
#include <string>

using namespace std;

template<typename T>
class Array1D{
private:
    vector<T> data_; 
    int xsize_; 
public:
    Array1D(): xsize_(0) {};

    // creates vector of size nx and sets each element to t
    Array1D(const int& nx, const T& t): xsize_(nx) {
        data_.resize(xsize_, t);
    }

    T& operator()(int i) {return data_[i];}
    T& operator[](int i) {return data_[i];}
};
Run Code Online (Sandbox Code Playgroud)

我的SWIG界面文件看起来像

%module test

%{ 
#define SWIG_FILE_WITH_INIT
#include "test.h"
%}

%include "std_vector.i"

// Array 1D Typemaps
// typemaps for standard vector<double>
namespace std{
%template(DoubleVector) vector<double>; …
Run Code Online (Sandbox Code Playgroud)

c++ python swig

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

如何使用swig在operator []中扩展python中的c ++类

我有一个简单的test.h文件和我自己的数组类(使用标准的矢量类):

#include <vector>
#include <string>

using namespace std;

class Array1D{
private:
   vector<double> data_; 
   int xsize_; 
public:
    Array1D(): xsize_(0) {};

    // creates vector of size nx and sets each element to t
    Array1D(const int& nx, const double& t): xsize_(nx) {
       data_.resize(xsize_, t);
    }

    double& operator()(int i) {return data_[i];}
    const double& operator[](int i) const {return data_[i];}

};
Run Code Online (Sandbox Code Playgroud)

我希望能够使用swig在python中使用[]运算符.我当前的SWIG界面文件看起来像

 %module test

 %{ 
 #define SWIG_FILE_WITH_INIT 
 #include "test.h"
 %}

 %include "std_vector.i"

 namespace std{
%template(DoubleVector) vector<double>;
 }

 %include "test.h"
Run Code Online (Sandbox Code Playgroud)

当我创建模块时,一切运行正常,但是当我实例化Array1D的对象时,a = test.Array1D(10,2),它创建一个长度为10的向量,每个元素中有2个,并输入[1]我得到 TypeError: 'Array1D' object does …

c++ python swig

3
推荐指数
1
解决办法
910
查看次数

如何使用numpy找到两个非常大的矩阵的行之间的成对差异?

给定两个矩阵,我想计算所有行之间的成对差异.每个矩阵有1000行和100列,所以它们相当大.我尝试使用for循环和纯广播,但for循环似乎工作得更快.难道我做错了什么?这是代码:

from numpy import *
A = random.randn(1000,100)
B = random.randn(1000,100)

start = time.time()
for a in A:
   sum((a - B)**2,1)
print time.time() - start

# pure broadcasting
start = time.time()
((A[:,newaxis,:] - B)**2).sum(-1)
print time.time() - start
Run Code Online (Sandbox Code Playgroud)

广播方法需要大约1秒的时间,对于大型矩阵来说甚至更长.任何想法如何加速纯粹使用numpy?

python numpy matrix numpy-broadcasting

3
推荐指数
1
解决办法
1114
查看次数

有没有办法仅在第一个(例如 100 个时代)之后才在 Keras 中实现提前停止

我的拟合函数是非凸函数,因此损失函数有时会在改善之前恶化。鉴于此,我想使用提前停止,但仅在前 100 个或更多 epoch 之后。到目前为止,我有这个:

# Early stopping
ES = [EarlyStopping(monitor='val_loss',patience=100,verbose=1,mode='auto')]

# fit model
history = model.fit(x_train, y_train, epochs=1000,batch_size=50,verbose=2,shuffle=True,validation_split=.1,callbacks=ES)
Run Code Online (Sandbox Code Playgroud)

不幸的是,拟合在 10 个左右的 epoch 后很早就停止了。我想等到第100个纪元开始提前停止。有任何想法吗?除了提前停止之外的任何建议也值得赞赏。

python neural-network keras

3
推荐指数
1
解决办法
2097
查看次数

在python中,如何为我自己的矩阵类创建两个索引切片?

我试图在python中编写自己的矩阵类,仅用于测试目的.实际上,这个矩阵类是用c ++编写的,我使用SWIG来连接两者.但是,对于这个问题,考虑这个矩阵类的纯python实现可能更简单.

我希望能够调用此矩阵类并使用双索引切片.例如,在我们创建4x4矩阵之后,

>>> A = Matrix(4,4,1)
Run Code Online (Sandbox Code Playgroud)

我希望能够获得sub 2x2矩阵:

>>>> A[1:2,1:2]
Run Code Online (Sandbox Code Playgroud)

我听说过这种__getslice__方法,但这似乎只允许单一切片,例如A[1:2].那么如何才能执行双索引切片以便我可以调用A[i:j,l:k]

谢谢!

python matrix slice magic-methods

2
推荐指数
1
解决办法
111
查看次数