Python to Mat-file: экспорт списка строк в обычную матрицу символов (не массив ячеек!)
Этот код на Python создает ячейку "STRINGS" в.mat-файле:
data = {"STRINGS": numpy.empty((0),dtype=numpy.object)}
data["STRINGS"] = numpy.append( data["STRINGS"], "Some string" )
scipy.io.savemat( output_mat_file, data )
В Matlab я получаю STRING клетки:
>> STRINGS{1}
ans =
Some string
Как я мог получить обычную матрицу? Например:
>> strings(1,:) = char('Some ');
>> strings(1,:)
ans =
Some
РЕДАКТИРОВАТЬ
Если я выполню следующий код, я получу неправильное толкование массива.
Python:
list = ['hello', 'world!!!']
scipy.io.savemat(output_mat_file, mdict={'list':list})
Matlab:
>> list
list =
hlo wrd!
1 ответ
В MATLAB массивы ячеек являются контейнерами для разнородных типов данных, а матрицы - нет, и все их элементы должны быть одного типа (будь то числовые числа или символы)
Матрицы имеют прямоугольную форму (таким образом, если вы храните строки в каждой строке 2D-матрицы, они должны быть одинаковой длины или дополнены пробелами). Это понятие относится и к многомерным матрицам.
MATLAB-эквивалентом списков Python являются массивы ячеек:
питон
x = [1, 10.0, 'str']
x[0]
MALTAB
x = {int32(1), 10, 'str'}
x{1}
РЕДАКТИРОВАТЬ:
Вот пример, чтобы показать разницу:
питон
import numpy
import scipy.io
list = ['hello', 'world!!!']
scipy.io.savemat('file.mat', mdict={'list':list})
list2 = numpy.array(list, dtype=numpy.object)
scipy.io.savemat('file2.mat', mdict={'list2':list2})
MATLAB
>> load file.mat
>> load file2.mat
>> whos list list2
Name Size Bytes Class Attributes
list 2x8 32 char
list2 2x1 146 cell
Теперь мы можем получить доступ к строкам как:
>> list(1,:)
ans =
hello
>> list2{1}
ans =
hello
Обратите внимание, что в случае матрицы строки были дополнены пробелами, поэтому все строки имеют одинаковую длину (вы можете использовать STRTRIM)