ускорение упаковки :: ублас с глотком - PullRequest
1 голос
/ 03 мая 2010

Я пытаюсь передать данные по слоям numpy и boost :: ublas. я написал ультратонкую оболочку, потому что Swig не может разобрать ублас заголовок правильно. Код показан ниже

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/lexical_cast.hpp>
#include <algorithm>
#include <sstream>
#include <string>

using std::copy;
using namespace boost;

typedef boost::numeric::ublas::matrix<double> dm;
typedef boost::numeric::ublas::vector<double> dv;

class dvector : public dv{
 public:
 dvector(const int rhs):dv(rhs){;};
 dvector();
 dvector(const int size, double* ptr):dv(size){
   copy(ptr, ptr+sizeof(double)*size, &(dv::data()[0]));
 }
 ~dvector(){}
};

с интерфейсом SWIG, похожим на

%apply(int DIM1, double* INPLACE_ARRAY1) {(const int size, double* ptr)}
class dvector{
 public:
 dvector(const int rhs);
 dvector();
 dvector(const int size, double* ptr);
       %newobject toString;
 char* toString();
       ~dvector();
};

Я успешно скомпилировал их с помощью gcc 4.3 и vc ++ 9.0. тем не мение когда я просто бегу

a = dvector(array([1.,2.,3.]))

это дает мне ошибку. Это первый раз, когда я использую Swigh с NumPy и не имеют полного понимания между преобразованием данных и передача в буфер памяти. Кто-нибудь видит что-то очевидное у меня пропущенный? Я пытался отследить с помощью отладчика, но он разбился в ассемблеры python.exe. Я понятия не имею, если это проблема глотка или моей простой обертки. Все ценится.

Ответы [ 2 ]

3 голосов
/ 04 августа 2010

Вас может заинтересовать модуль pyublas . Он выполняет преобразование между массивами NumPy и типами данных UBLAS без проблем и без копирования.

1 голос
/ 03 мая 2010

Вы можете заменить

копия (ptr, ptr + sizeof (double) * size, & (dv :: data () [0]));

по

копия (ptr, ptr + size, & (dv :: data () [0])); * +1007 *

Помните, что в C / C ++ добавление или вычитание из указателя перемещает его на величину, кратную размеру типа данных, на который он указывает.

Best

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...