在地图中存储多个矩阵(GSL)

时间:2017-12-06 12:47:07

标签: python c++ dictionary matrix gsl

我有多个矩阵,我想存储在一些c / c ++对象中。我仍然是c / c ++的新手,但我被告知这是这样做的一种方式。

  1. 创建地图
  2. 将矩阵存储在地图的键上
  3. 这是一个差不多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复制?

1 个答案:

答案 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

我希望这有帮助!