首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mat文件(.mat matlab数据文件)结构

mat文件(.mat matlab数据文件)结构
EN

Stack Overflow用户
提问于 2015-09-22 18:03:25
回答 2查看 466关注 0票数 0

在一天半的时间里,我提到了枕骨和矮胖的医生,我试着这样做-

代码语言:javascript
复制
dt = {'names':[u'OSversInt',u'Desc',u'OSversStr',\
... u'OSname',u'platform',u'Board'],\
...'formats':['O','O','O','O','O','O']}

aa = np.array([[ np.array([[ ([[15]],[u''],[u'5.0,1'],\
... [u'Android'],[u'main'],[u'MSM8960'])]], np.dtype(dt))]]\
... ,np.dtype(object))

预期结果:

因为当我这么做的时候

代码语言:javascript
复制
aa = scipy.io.loadmat('file.mat')

产生以下结果。

代码语言:javascript
复制
aa = array([[ array([[ ([[15]], [], [u'5.0.1'], [u'Android'], [u'main'], [u'MSM8960'])]], 
          dtype=[('OSversInt', 'O'), ('Desc', 'O'), ('OSversStr', 'O'),
    ('OSname', 'O'), ('platform', 'O'), ('Board', 'O')])]], dtype=object)

实际结果-

代码语言:javascript
复制
array([[[[ ([[15]], [u''], [u'5.0.1'], [u'Android'], [u'main']
,[u'MSM8960'])]]]], dtype=object)

如何使我的实际结果与我的预期结果相匹配?--这对于保存现有的mat文件结构至关重要。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-22 21:52:58

在Octave中,我创建了一个带有结构对象的单元:

代码语言:javascript
复制
octave:14> y={x}
y = 
{
  [1,1] =

    scalar structure containing the fields:

      OSversInt =  15
      Desc = 
      OSverStr = 5.0.1
      OSname = Android

}
octave:15> save stack32723802.mat -V7 y

numpy中,我将其加载为:

代码语言:javascript
复制
In [376]: L=loadmat('stack32723802.mat')
In [377]: L['y']
Out[377]: 
array([[ array([[([[15.0]], [], ['5.0.1'], ['Android'])]], 
      dtype=[('OSversInt', 'O'), ('Desc', 'O'), ('OSverStr', 'O'), ('OSname', 'O')])]], 
      dtype=object)

这是一个2d对象数组(1,1),包含一个项,也是2d (1,1),具有复合dtype。

代码语言:javascript
复制
In [390]: y=L['y']
In [391]: y[0,0]
Out[391]: 
array([[([[15.0]], [], ['5.0.1'], ['Android'])]], 
      dtype=[('OSversInt', 'O'), ('Desc', 'O'), ('OSverStr', 'O'), ('OSname', 'O')])

In [392]: y[0,0][0,0]
Out[392]: ([[15.0]], [], ['5.0.1'], ['Android'])

In [394]: y[0,0]['OSversInt']
Out[394]: array([[array([[ 15.]])]], dtype=object)

In [395]: y[0,0]['OSname']
Out[395]: 
array([[array(['Android'], 
      dtype='<U7')]], dtype=object)

4d的“实际结果”是np.array产生它所能产生的最高维数组的结果。

首先创建内部结构化数组:

代码语言:javascript
复制
In [405]: dt=y.item().dtype
In [406]: item=([[15.0]], [], ['5.0.1'], ['Android'])
In [407]: array1 = np.array([[item]], dtype=dt)
In [408]: array1
Out[408]: 
array([[([[15.0]], [], ['5.0.1'], ['Android'])]], 
      dtype=[('OSversInt', 'O'), ('Desc', 'O'), ('OSverStr', 'O'), ('OSname', 'O')])

如果我只是将它封装在一个2d对象数组中,就会得到一个4d数组:

代码语言:javascript
复制
In [409]: np.array([[array1]], dtype=object)
Out[409]: array([[[[([[15.0]], [], ['5.0.1'], ['Android'])]]]], dtype=object)

但是,如果我创建一个空的2d对象数组,并插入这个内部数组,则会得到与loadmat结果匹配的内容:

代码语言:javascript
复制
In [410]: z=np.empty((1,1),dtype=object)
In [411]: z[0,0]=np.array([[item]], dtype=dt)
In [412]: z
Out[412]: 
array([[ array([[([[15.0]], [], ['5.0.1'], ['Android'])]], 
      dtype=[('OSversInt', 'O'), ('Desc', 'O'), ('OSverStr', 'O'), ('OSname', 'O')])]], dtype=object)
票数 1
EN

Stack Overflow用户

发布于 2015-09-22 21:27:03

基于hpaulj的评论,您可能正在寻找

代码语言:javascript
复制
aa = np.empty((1,1), dtype='O')
aa[0,0] = np.array([[ ([[15]], [], [u'5.0.1'], [u'Android'], [u'main'], [u'MSM8960'])]], 
          dtype=[('OSversInt', 'O'), ('Desc', 'O'), ('OSversStr', 'O'),
                 ('OSname', 'O'), ('platform', 'O'), ('Board', 'O')])

产额

代码语言:javascript
复制
In [39]: aa
Out[39]: 
array([[ array([[([[15]], [], [u'5.0.1'], [u'Android'], [u'main'], [u'MSM8960'])]], 
      dtype=[('OSversInt', 'O'), ('Desc', 'O'), ('OSversStr', 'O'), ('OSname', 'O'), ('platform', 'O'), ('Board', 'O')])]], dtype=object)

当您想要将任意Python对象(例如NumPy数组或列表)放置到NumPy数组中时,dtype必须是object。在这种情况下,使用np.array构造失败,因为这个函数解释内部序列 (元组除外)作为要递归的值,而不是作为原子元素。

因此,创建这些嵌套对象数组的诀窍是首先创建外部对象数组:

代码语言:javascript
复制
aa = np.empty((1,1), dtype='O')

然后将所需的值赋值给数组的单元格:

代码语言:javascript
复制
aa[0,0] = ...

注意,dtype object的嵌套object数组不允许您利用NumPy的快速(主要是数字)函数。它们与它们包含的Python对象的内存占用量本质上是相同的,从性能上看,它们通常不会比普通Python列表更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32723802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档