为什么我使用scipy.io.savemat获得一行和一列而不是两列

时间:2018-11-12 17:16:01

标签: python matlab scipy

我得到两个数据,我想将其作为.mat文件 所以我用了scipy.io和scipy.io.savemat模块 但是当我打开文件时,我得到了: enter image description here

我想获得两列为950x1而不是1x950

这是代码:

import scipy.io as sio

x = Ramanshift1[64:1014]
Hem_I_Nor = pd.Normalization(y3_arpls)
sio.savemat(Hem_path+'/matdata.mat',{'ramanshift':x,'ramanspectra':Hem_I_Nor})

x来自一列 并且Hem_I_Nor来自熊猫,所有这些都可以保存到.csv和两列中

1 个答案:

答案 0 :(得分:1)

在一个小小的会话中:

In [25]: from scipy.io import savemat
In [26]: savemat('test.mat', {'x':np.ones((3,),int), 'y': np.ones((3,1),int), 'z
    ...: ': np.ones((1,3),int)})

在八度会话中,load之后:

>> size(x),size(y),size(z)
ans =
   1   3

ans =
   3   1

ans =
   1   3

这是被制成(1,n)矩阵的一维数组:

x =
  1  1  1

对于2d数组,请观看order。 MATLAB使用F。所以

In [31]: np.arange(12).reshape(3,4,order='F')
Out[31]: 
array([[ 0,  3,  6,  9],
       [ 1,  4,  7, 10],
       [ 2,  5,  8, 11]])

另存为

>> w
w = 
   0   3   6   9
   1   4   7  10
   2   5   8  11

由于数组/矩阵顺序的固有差异,将值从一个转移到另一个可能会造成混淆。 savemat/loadmat操作不一定有帮助。

查看文档,还有一个oned_as参数可以控制将(n,)数组另存为(n,1)还是(1,n)。