2

Python のこのコードは、.mat-file にセル "STRINGS" を作成します。

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{1}

ans =

Some string

通常の行列を取得するにはどうすればよいですか? 例えば:

>> strings(1,:) = char('Some ');
>> strings(1,:)

ans =

Some 

編集

次のコードを実行すると、誤解された配列マングリングが発生します。

パイソン:

list = ['hello', 'world!!!']
scipy.io.savemat(output_mat_file, mdict={'list':list})

マトラブ:

>> list
list =
hlo wrd!
4

1 に答える 1

3

MATLABでは、セル配列は異種データ型のコンテナーですが、行列はそうではなく、すべての要素は同じ型である必要があります(数値のdoubleまたは文字)

行列は長方形です(したがって、各2D行列行に文字列を格納する場合は、すべて同じ長さであるか、スペースが埋め込まれている必要があります)。この概念は、多次元行列にも当てはまります。

Pythonのリストに相当するMATLABは、セル配列です。

Python

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

MALTAB

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

編集:

違いを示す例を次に示します。

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

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を使用できます)。

于 2011-09-18T22:14:07.713 に答える