Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将本征矩阵转换为numpy矩阵 我在C++中使用下面的代码,使用特征库,需要帮助翻译到python(NoMPY)_Python_C++_Numpy_Eigen_Code Conversion - Fatal编程技术网

将本征矩阵转换为numpy矩阵 我在C++中使用下面的代码,使用特征库,需要帮助翻译到python(NoMPY)

将本征矩阵转换为numpy矩阵 我在C++中使用下面的代码,使用特征库,需要帮助翻译到python(NoMPY),python,c++,numpy,eigen,code-conversion,Python,C++,Numpy,Eigen,Code Conversion,初始化 double b = 20.0; Eigen::Vector3d C(1.0/10.2, 1.0/10.2, 1/30); Eigen::MatrixXd U(5200, 3); int i = 0; for (double x = 10.2/2.0; x < 200; x += 10) { for (double y = 10.2/2.0; y < 200; y += 10) { for (double t = 0; t <= 360; t

初始化

double b = 20.0;
Eigen::Vector3d C(1.0/10.2, 1.0/10.2, 1/30);

Eigen::MatrixXd U(5200, 3);
int i = 0;
for (double x = 10.2/2.0; x < 200; x += 10) {
    for (double y = 10.2/2.0; y < 200; y += 10) {
        for (double t = 0; t <= 360; t += 30) {
            U(i, 0) = x;
            U(i, 1) = y;
            U(i, 2) = psi;
            i += 1;
        }
    }
}
我感到困惑的是:

  • 在C++实现中,我认为<>代码[p[i+1] >应该是一个单独的值
  • 在我的python版本中,我得到一个
    p[I+4]
    平方矩阵
  • 每个
    p[i+4]
    都是一个零矩阵

  • 我无法破译我的错误。请帮忙

    试着在里面打印一些东西,看看你能得到什么。它真的是一个一维向量吗?同样,i在U.shape[0]范围内的
    行:
    应该是i在U.shape[0]范围内的
    s
    确实是一个一维向量
    U[i]
    是矩阵的第
    i
    行,所以
    U[i].T
    是一个列数组。当您从1d(~row)数组
    s
    中减去它时,您将通过数组广播得到一个矩阵。旁注:您应该使用
    np.array
    而不是
    np.matrix
    ,因为前者更灵活,而且您似乎没有实际使用矩阵方法(数组也不会出现同样的问题,因为这样
    U[i]
    将是1d数组,因此
    U[i]。t
    将与
    U[i]
    相同。
    Eigen::VectorXd operator()(const Eigen::VectorXd& s) {
        Eigen::VectorXd p(length());
    
        p(0) = s[0];
        p(1) = s[1];
        p(2) = s[2];
        p(3) = s[3];
    
        for (int i = 0; i < U.rows(); i++) {
            p(i + 4) = b*exp(-0.5*(s.tail(U.cols()) - U.row(i).transpose()).dot(C*(s.tail(U.cols())
                                - U.row(i).transpose())));
            if (p(i + 4) < 0.1) {
                p(i + 4) = 0;
            }
        }
    
        return p;
    }
    
    my_x = 10.2/2.0
    my_y = 10.2/2.0
    my_p = 0
    
    xx = []
    while my_x < 200:
        xx.append(my_x)
        my_x += 10
    
    yy = []
    while my_y < 200:
        yy.append(my_y)
        my_y += 10
    
    pps = []
    while my_psi <= 360:
        pps.append(my_p)
        my_p+=30
    
    U =[]
    for x in xx:
        for y in yy:
            for p in pps:
                U.append([x,y,p])
    
    U = numpy.matrix(U)
    
    C = numpy.array([1.0/10.2, 1.0/10.2, 1.0/30.0])
    
    b = 20.0
    
    def doSomething(s):   # Where s is a numpy array (1-d vector)
        p[0:4] = s[0:4]
        for i in range (U.shape[0]):
            s_dash = -0.5*(s - U[i].T)
            s_ddash = C*s
            s_dddash = s_dash.dot(s_ddash) - U[i].T
            p[i+4] = b * numpy.exp(s_dddash)
    
            if p[i+4] < 0.1: p[i+4] = 0