古き良き時代(約3.0節)には、MATLABには1つのデータ構造、つまり行列がありました。数字や文字を含むことができ、常に2dだった。
マトリックスや文字列を含むより一般的なオブジェクトを含むようにセルが追加されました。彼らはまだ2dだった。
Pythonはリストを持っていましたが、リストは1dですが、何でも含めることができます。 numpy
はPython上に構築され、多次元配列を追加します。しかしリストはまだ利用可能です。
配列をリストに変換する可能性のあるものは、num2cell
と同じですが、機能は重複していますが、正確ではありません。
In [247]: B=list(A)
In [248]: B
Out[248]:
[array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]]),
array([[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])]
tolist
方法は、リスト(ネストされた)への完全な変換を実行します。リスト内
In [246]: A=np.arange(24).reshape(2,3,4) # 3d array
ラッピングは、米国2つのアレイ(2D)のリストを与えます。
In [249]: C=A.tolist()
In [250]: C
Out[250]:
[[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]],
[[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]
list(A)
一般的ではなく、tolist
を意味している際にエラーに使用することができます。
np.split(A,...)
はB
と似ていますが、サブアレイはまだ3dです。 A
は反復可能であるため、[a for a in A]
は1次元目にA
を分割します。A
は繰り返し可能ですので、A
は反復可能ですので、A
が繰り返し可能です。
In [257]: a,b=A
In [258]: a
Out[258]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
dtypeというオブジェクトがあります。これにより、他の配列を含むオブジェクトを配列に配置できます。しかし、多くのSOの質問に示されているように、これは構築するのが難しいかもしれません。 np.array
は可能な限り最高次元の配列を作成しようとします。あなたはそれを回避するためにいくつかのトリックを実行する必要があります。
In [259]: Z=np.empty((2,),dtype=object)
In [260]: Z
Out[260]: array([None, None], dtype=object)
In [261]: Z[0]=A[0]
In [262]: Z[1]=A[1]
In [263]: Z
Out[263]:
array([ array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]]),
array([[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])], dtype=object)
================オクターブセッションにおいて
:
>> anum = [1,2,3,4]
anum =
1 2 3 4
>> acell = num2cell(anum)
acell =
{
[1,1] = 1
[1,2] = 2
[1,3] = 3
[1,4] = 4
}
>> save -7 test.mat anum acell
scipy.io.loatmat
バージョン
In [1822]: data = io.loadmat('../test.mat')
In [1823]: data
Out[1823]:
{'__globals__': [],
'__header__': b'MATLAB 5.0 MAT-file, written by Octave 4.0.0,
2016-10-27 00:59:27 UTC',
'__version__': '1.0',
'acell': array([[array([[ 1.]]), array([[ 2.]]), array([[ 3.]]),
array([[ 4.]])]], dtype=object),
'anum': array([[ 1., 2., 3., 4.]])}
matrix
は2次元配列としてレンダリングされます。オブジェクトタイプ配列(2d)としてcell
を含み、この場合、2次元配列を含む。
'num2cell()'はデータの分割に非常に便利です。マルチDアレイをセクションに簡単にスライスすることができ、後続の操作が容易になります。行のリスト、列のリストなど、または任意のブロックのリストを持つように、スライスすることができます。 –
MATLABのセルは通常、非規則的な(行列以外の)データ構造に使用されます。サイズの異なるベクトルのシーケンスまたは文字列のシーケンス。 Pythonの同等の機能は、オブジェクトのネイティブリスト(または辞書)です。 –
私たちの回答はどんな役に立ちましたか? – rayryeng