如何从python创建matlab数据集?

时间:2017-09-04 16:02:19

标签: python matlab

我有几个图形实例,我使用networkx测量了Python中的功能,如密度,顺序,大小,节点度等。现在,我想创建一个文件,其中保存每个实例的特征向量,因此我可以将其加载到matlab中,类似于:

load hald

为了处理它。

这是一个实例的特征向量的python字典:

{'orden': 100, 'name': 'random_P1_N100_I1', 'density': 0.1006060606060606, 'diameter': 4, 'radius': 3, 'size': 498}

我有几个特征向量,现在我想将它们放入.mat文件中,以便在Matlab中分析数据。

我尝试了scipy.io.savemat,但没有成功。那么也许存在一种更“手动”的方式呢?

1 个答案:

答案 0 :(得分:0)

好吧,我已经设法做到了,这就是我带来的。

首先,我创建了一个python字典,其中的功能名称为键,空列表为值。

WholeDict = {'name':list(), 'order':list(), 'size':list(), 'density':list(), 'diameter':list(), 'radius':list(), 'nodesEccentricity':list()}

然后,我测量实例的功能,并将每个功能值附加到字典中的相应功能键。我为每个实例都这样做。 当这个过程结束时,我有一个字典,每个项目都是一个列表,表示跨实例的测量特征的值。

WholeDict['name'].append(instanceName)
WholeDict['order'].append(order)
WholeDict['size'].append(size)
WholeDict['density'].append(density)
WholeDict['diameter'].append(diameter)
WholeDict['radius'].append(radius)
WholeDict['nodesEccentricity'].append(nodesEccentricity.items())

测量了三个不同的实例后,python字典就有了这个内容:

{'diameter': [2, 3, 3], 'name': ['c3c3', 'c3c4', 'c3c5'], 'density': [0.5, 0.36363636363636365, 0.2857142857142857], 'nodesEccentricity': [[(1, 2), (2, 2), (3, 2), (4, 2), (5, 2), (6, 2), (7, 2), (8, 2), (9, 2)], [(1, 3), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3), (7, 3), (8, 3), (9, 3), (10, 3), (11, 3), (12, 3)], [(1, 3), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3), (7, 3), (8, 3), (9, 3), (10, 3), (11, 3), (12, 3), (13, 3), (14, 3), (15, 3)]], 'radius': [2, 3, 3], 'order': [9, 12, 15], 'size': [18, 24, 30]}

令人高兴的是,它甚至可以使用值列表的功能,例如节点偏心率。所以我可以用它保存它:

sio.savemat('aMatFile', {'featureSet':WholeDict})

然后在Matlab中打开它:

load aMatFile

在Matlab中,字典变成了一个名为featureSet的结构,如下所示:

>> featureSet

featureSet = 

         diameter: [2 3 3]
             name: [3x4 char]
          density: [0.5 0.363636363636364 0.285714285714286]
nodesEccentricity: {[9x2 int64]  [12x2 int64]  [15x2 int64]}
           radius: [2 3 3]
            order: [9 12 15]
             size: [18 24 30]

功能值可以访问为:

>> featureSet.name

ans =

c3c3
c3c4
c3c5

如果我想看到实例c3c3的节点偏心:

featureSet.nodesEccentricity{1}

ans =

                1                    2
                2                    2
                3                    2
                4                    2
                5                    2
                6                    2
                7                    2
                8                    2
                9                    2

我认为这对我有用,我希望它对其他人也有用。谢谢大家。