我有多个矩阵,我想存储在一些c / c ++对象中。我仍然是c / c ++的新手,但我被告知这是这样做的一种方式。
这是一个差不多working MWE(如果它有效,我不需要问这个问题):
#include <map>
#include <stdio.h>
#include <stdio.h>
#include <gsl/gsl_matrix.h>
int
main (void)
{
int i, j;
std::map<int,double> test;
gsl_matrix * m = gsl_matrix_alloc (10, 3);
for (i = 0; i < 10; i++)
for (j = 0; j < 3; j++)
gsl_matrix_set (m, i, j, 0.23 + 100*i + j);
// store in map
test[1] = m;
gsl_matrix_free (m);
return 0;
}
我变得不确定(并且出现错误):
std::map<int,double> test;
因为gsl_matrix
是一个结构,我认为这与我想做的事情不相容。错误如下:
cannot convert gsl_matrix* to std::map<int, double>::mapped_type {aka double} in assignment
确切地说,我想要做的是类似于python,我们可以将对象存储到字典中,如下所示:
import numpy as np
test = {}
test['a'] = np.array([[1,2],[2,3]])
test['b'] = np.array([[1,2],[3,3]])
test['c'] = np.array([[1,3],[5,3]])
test['d'] = np.array([[1,5],[6,3]])
.
.
.
如何最好地与gsl
复制?
答案 0 :(得分:0)
首先,我不是C ++程序员!
但是我很确定你想要做的是将地图的值指定为gsl_matrix *
。以下编译没有任何错误,但我认为您可能需要实现std::map
运算符。
#include <map>
#include <stdio.h>
#include <stdio.h>
#include <gsl/gsl_matrix.h>
int
main (void)
{
int i;
int j;
std::map<int, gsl_matrix *> test;
gsl_matrix * m = gsl_matrix_alloc (10, 3);
for (i = 0; i < 10; i++) {
for (j = 0; j < 3; j++) {
gsl_matrix_set(m, i, j, 0.23 + 100*i + j);
}
}
// store in map
test[1] = m;
gsl_matrix_free(m);
return 0;
}
然后编译:
g++ -o test test.cpp -lgsl -lgslcblas
我希望这有帮助!