将 matlab 元胞数组导入 python 用于 scikit-learn

bro*_*ser 2 python matlab data-import scikit-learn

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

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

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

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

pim*_*314 5

您只需使用scipy.io.loadmat. 但是由于格式上的一些差异,您必须小心。

from scipy import io
import numpy as np

C = io.loadmat('test.mat')
print type(C)
print C.keys()
Run Code Online (Sandbox Code Playgroud)

输出:

<type 'dict'>
['C', '__version__', '__header__', '__globals__']
Run Code Online (Sandbox Code Playgroud)

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

C = C['C']
print type(C)
Run Code Online (Sandbox Code Playgroud)

输出:

<type 'numpy.ndarray'>
Run Code Online (Sandbox Code Playgroud)

好的,所以可以使用 Matlab 中的 Cell。

print C.shape
Run Code Online (Sandbox Code Playgroud)

输出:

(1, 81)
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

输出:

(81, 30, 30)
Run Code Online (Sandbox Code Playgroud)

瞧,我们把你的细胞放在一个numpy数组中。正如前向警告一样,通常scikit-learn将 2D 数组作为输入,而不是 3D 数组。