2016-11-01 2 views
0

У меня есть массив ячеек 1x81 в Matlab.Импортировать массив матрицы Matlab в python для scikit-learn

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

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

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

+0

необходимо изменить форму массива ячеек на матрицу, а затем https://stackoverflow.com/questions/37620330/import-tensor-with-mat-format-to-tensorflow – GameOfThrows

+0

Я бы предложил вам посмотреть на этот другой вопрос тоже: http://stackoverflow.com/questions/1761419/numpy-equivalent-of-matlabs-cell-array – Eskapp

ответ

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 является inlcuding кучу больше информации, что мы делаем на самом деле не нужно, но мы можем видеть вашу клетку C.

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

Ouputs:

<type 'numpy.ndarray'> 

Ока y, так что у меня есть 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-массив как входной, а не трехмерный массив.

+0

Спасибо, что работает отлично! Спасибо, что объяснили это через каждый шаг – browser

Смежные вопросы