Python to Mat-file: экспорт списка строк в обычную матрицу символов (не массив ячеек!) - PullRequest
2 голосов
/ 19 сентября 2011

Этот код на 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 я получаю ячейку STRINGS:

>> 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 Ответ

3 голосов
/ 19 сентября 2011

В MATLAB массивы ячеек являются контейнерами для разнородных типов данных, а матрицы - нет, и все их элементы должны быть одного типа (будь то числовые числа или символы)

Матрицы имеют прямоугольную форму (таким образом, если вы храните строки в каждой строке 2D-матрицы, они должны быть одинаковой длины или дополнены пробелами). Это понятие относится и к многомерным матрицам.

MATLAB-эквивалент списков Python - это массивы ячеек:

Python

x = [1, 10.0, 'str']
x[0]

MALTAB

x = {int32(1), 10, 'str'}
x{1}

EDIT:

Вот пример, показывающий разницу:

Python

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})

1021 * 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)

...