2010-03-12 34 views
12

Tôi đang cố gắng xuất danh sách chuỗi văn bản từ Python sang MATLAB bằng scipy.io. Tôi muốn sử dụng scipy.io vì tệp .mat mong muốn của tôi nên bao gồm cả ma trận số (mà tôi đã học để làm here) và mảng ô văn bản.Python đến MATLAB: xuất danh sách chuỗi bằng scipy.io

tôi đã cố gắng:

import scipy.io 
my_list = ['abc', 'def', 'ghi'] 
scipy.io.savemat('test.mat', mdict={'my_list': my_list}) 

Trong MATLAB, tôi tải test.mat và có được một mảng ký tự:

my_list = 

adg 
beh 
cfi 

Làm thế nào để làm cho scipy.io xuất danh sách vào một mảng tế bào MATLAB ?

+2

Tôi cũng có thể quan tâm đến dự án python-in-MATLAB của tôi: http://github.com/kw/pymex – kwatford

Trả lời

12

Bạn cần phải thực hiện my_list một mảng của các đối tượng NumPy:

import scipy.io 
import numpy as np 
my_list = np.zeros((3,), dtype=np.object) 
my_list[:] = ['abc', 'def', 'ghi'] 
scipy.io.savemat('test.mat', mdict={'my_list': my_list}) 

Sau đó, nó sẽ được lưu trong một định dạng tế bào. Có thể có một cách tốt hơn để đặt nó vào một np.object, nhưng tôi đã theo cách này từ Scipy documentation.

+0

Hoạt động, cảm ơn! – williampli

+0

Đối với hậu thế: một cách dễ dàng hơn để tạo một mảng đối tượng là 'np.asarray (['abc', 'def', 'ghi'], dtype = 'object')'. – Dougal

1

Dường như nội dung của danh sách được xuất đúng cách, chúng chỉ được chuyển đổi và được đặt trong một mảng ký tự. Bạn có thể dễ dàng chuyển đổi nó vào mảng di động mong muốn của chuỗi trong MATLAB bởi transposing nó và sử dụng CELLSTR, mà đặt mỗi hàng trong một tế bào riêng biệt:

>> my_list = ['adg';'beh';'cfi']; %# Your example 
>> my_list = cellstr(my_list') %'# A 3-by-1 cell array of strings 

my_list = 

    'abc' 
    'def' 
    'ghi' 

Cấp, điều này không đề cập đến các chi tiết chung vấn đề xuất dữ liệu dưới dạng mảng ô từ Python sang MATLAB, nhưng nó sẽ trợ giúp với vấn đề cụ thể mà bạn liệt kê ở trên.

+0

Điều này cũng hữu ích, cảm ơn! – williampli

Các vấn đề liên quan