相关疑难解决方法(0)

在Python中读取.mat文件.但数据的形状发生了变化

 % save .mat file in the matlab    
train_set_x=1:50*1*51*61*23;   
train_set_x=reshape(train_set_x,[50,1,51,61,23]);   
save(['pythonTest.mat'],'train_set_x','-v7.3');
Run Code Online (Sandbox Code Playgroud)

在matlab中获得的数据大小为(50,1,51,61,23).

我使用此链接的指令在Python中加载.mat文件.

代码如下:

import numpy as np, h5py
f = h5py.File('pythonTest.mat', 'r')
train_set_x = f.get('train_set_x')
train_set_x = np.array(train_set_x)
Run Code Online (Sandbox Code Playgroud)

train_set_x.shape的输出是(23L, 61L, 51L, 1L, 50L).预计会是(50L, 1L, 51L, 61L, 23L).所以我改变了形状

train_set_x=np.transpose(train_set_x, (4,3,2,1,0))
Run Code Online (Sandbox Code Playgroud)

我很好奇Python和matlab之间数据形状的变化.我的代码中有错误吗?

python file-io matlab numpy mat-file

6
推荐指数
1
解决办法
1940
查看次数

4x4矩阵预乘与后乘

我有以下功能:

void Matrix::Scale(const float xScale, const float yScale, const float zScale)
{
    Matrix scaleMatrix;
    scaleMatrix.m_data[M11] = xScale;
    scaleMatrix.m_data[M22] = yScale;
    scaleMatrix.m_data[M33] = zScale;
    *this *= scaleMatrix;
}

void Matrix::Translate(const float xTranslation, const float yTranslation, const float zTranslation)
{
    Matrix translationMatrix;
    translationMatrix.m_data[M14] = xTranslation;
    translationMatrix.m_data[M24] = yTranslation;
    translationMatrix.m_data[M34] = zTranslation;
    *this *= translationMatrix;
}
Run Code Online (Sandbox Code Playgroud)

而且我不确定这两个函数的最后几行.我应该进行预乘法还是后乘法(即我现在正在做的事情).它对这个类的使用有什么影响?我正在使用OpenGL类,所以任何相似之处都可能有用.

编辑:

我的着色器代码如下所示:

void main()
{
    gl_Position = vec4(v_xy, 0.0, 1.0) * v_ModelMatrix * v_ViewMatrix * v_ProjectionMatrix;
    f_uv = v_uv;
}
Run Code Online (Sandbox Code Playgroud)

我的矩阵乘法函数如下所示:

// Row 1
result[M11] = …
Run Code Online (Sandbox Code Playgroud)

c++ opengl math matrix

5
推荐指数
1
解决办法
5911
查看次数

标签 统计

c++ ×1

file-io ×1

mat-file ×1

math ×1

matlab ×1

matrix ×1

numpy ×1

opengl ×1

python ×1