我发现一些问题,以保存我的整洁生成的数据到.mat文件。我原以为用Scipy会更直接,但似乎我做错了什么。在
以下是我要保存的数据示例:
out = {'features': array([[ 5.00088905e+01, 1.51847522e+01, 4.93513862e+01,
3.76548415e+00, -3.96946513e+01, -2.11885850e+01,
9.85304035e+00, -6.30005764e+00, 1.19987435e+01,
3.89762536e+00, -1.31554755e+00, -1.66890836e+01,
4.75289017e-02, 3.65829480e-01, -4.77872832e-01,
1.13641908e+00, -1.08742775e-01, -2.42751445e-01,
-1.13054913e-01, 3.39011561e-01, 1.37158960e-01,
-2.80760116e-01, -4.15187861e-01, 9.85433526e-02,
-8.66144928e-02, 9.18260870e-03, -7.38139130e-01,
8.04136232e-01, 2.31623188e-02, -7.88927536e-02,
-2.17779710e-01, 2.85428986e-01, -8.16231884e-02,
1.79710145e-03, -3.47710145e-01, -9.84115942e-02,
3.96077031e+00, 3.29914828e+01, 2.60086805e+01,
2.44418378e+01, 2.01712577e+01, 1.56827627e+01,
1.59131122e+01, 1.84134126e+01, 1.63149310e+01,
1.35579058e+01, 1.15772911e+01, 1.82263123e+01,
3.96077031e+00, 3.29914828e+01, 2.60086805e+01,
2.44418378e+01, 2.01712577e+01, 1.56827627e+01,
1.59131122e+01, 1.84134126e+01, 1.63149310e+01,
1.35579058e+01, 1.15772911e+01, 1.82263123e+01,
3.96077031e+00, 3.29914828e+01, 2.60086805e+01,
2.44418378e+01, 2.01712577e+01, 1.56827627e+01,
1.59131122e+01, 1.84134126e+01, 1.63149310e+01,
1.35579058e+01, 1.15772911e+01, 1.82263123e+01]]), 'tags': [['rock', 'metal']]}
它是一个矩阵的一行,可以与一个标记列表(长度可变)相关联。在
这个想法是要有一个.mat文件,其中包含矩阵和列表的单元格数组。当我这么做的时候:
^{pr2}$Matlab中标签的结果各不相同。对于上面的例子,我有一个1x2x5字符矩阵
val(:,:,1) = rm
val(:,:,2) = oe
val(:,:,3) = ct
val(:,:,4) = ka
val(:,:,5) = l
如果我尝试使用矩阵而不是单行向量,我会得到一个单元格数组,其中每一行都有一个单元格,但是列表被合并,特定行的单元格将是:rmoectkal
。在
我试着用一个例子来解释:
>>> genre_tags_matrix = np.array(genre_tags, dtype=np.object)
>>> print(genre_tags_matrix)
[['classical', 'pop'] ['classical'] ['classical'] ['classical']]
>>> out = {'tags' : genre_tags_matrix}
>>> scipy.io.savemat('./test.mat',out)
这是我在Matlab中看到的:
到底是怎么回事?有解决办法吗?在
问题是MATLAB和Octave中的字符串实际上只是一个字符数组,所以下面的语句是一个3D数组
如果我们用数字代替字符,让它更清楚地显示它是一个3D数组,我们得到这样的结果
^{pr2}$当您使用
savemat
将它们保存到.mat
文件中时,它将被视为一个3D数组。在如果你想要一个单元数组,你必须手动创建一个numpy数组。在
然后在MATLAB或倍频程内
更新
在一个嵌套的单元数组的情况下,您希望成为单元数组的每个级别都必须是一个numpy对象数组
相关问题 更多 >
编程相关推荐