将 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 数组。
我在 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 数组。