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

Store multiple matrices (GSL) in an map

本文关键字:存储 地图 GSL      更新时间:2023-10-16

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

  1. 创建地图
  2. 在地图的钥匙上存储矩阵

这几乎是工作的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如何最好地复制这?

首先,我不是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

我希望这会有所帮助!