Импорт массива ячеек Matlab в Python для scikit-learn

У меня есть массив ячеек 1x81 в Matlab.

Каждая ячейка представляет собой матрицу двойников 30x30.

Я хочу сохранить это в python (для использования в scikit-learn) с формой (81,30,30).

Я прочитал здесь несколько вопросов и проработал их код, но у меня ничего не получилось.


person browser    schedule 01.11.2016    source источник
comment
вам нужно преобразовать массив ячеек в матрицу, а затем stackoverflow.com/questions/37620330/   -  person GameOfThrows    schedule 01.11.2016
comment
Я бы посоветовал вам также взглянуть на этот другой вопрос: stackoverflow.com/questions/1761419/   -  person Eskapp    schedule 01.11.2016


Ответы (1)


Вы можете сделать это, просто используя 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'>

Итак, я использовал Cell от Matlab.

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-массив.

person piman314    schedule 01.11.2016
comment
Спасибо - это работает отлично! Спасибо за объяснение каждого шага - person browser; 02.11.2016