将 matlab 元胞数组导入 python 以进行 scikit-learn

Import matlab cell array into python for scikit-learn

我在 matlab 中有一个 1x81 元胞数组。

每个单元格都是一个 30x30 的双精度矩阵。

我想将其存储在 python 中(用于 scikit-learn),形状为 (81,30,30)。

我在这里阅读了一些问题并研究了他们的代码,但我没有取得任何成功。

您只需使用 scipy.io.loadmat 即可完成此操作。但是由于格式的一些差异,您必须小心。

from scipy import io
import numpy as np

C = io.loadmat('test.mat')
print type(C)
print C.keys()

输出:

<type 'dict'>
['C', '__version__', '__header__', '__globals__']

所以你可以看到 scipy 包含了很多我们并不真正需要的信息,但是我们可以看到你的单元格 C。

C = C['C']
print type(C)

输出:

<type 'numpy.ndarray'>

好的,那就是使用 Matlab 中的 Cell。

print C.shape

输出:

(1, 81)

这不太正确,但通过一些处理,我们可以按照您想要的方式获得它。

C = np.squeeze(C)
X = np.empty((C.shape[0], C[0].shape[0], C[0].shape[1]))
for i in xrange(X.shape[0]):
    X[i] = C[i]
print X.shape

输出:

(81, 30, 30)

瞧,我们将您的单元格放在 numpy 数组中。作为一个前向警告,一般来说 scikit-learn 将 2D 数组作为输入,而不是 3D 数组。