あなたの以前の質問をもう一度見ることなく、私は問題が今であると考えていますnumpy.array
は、サブリストまたは配列のリストから配列を作成します。
markerList
が期待どおりに保存され、セルのサイズが異なることに注意してください。
は
np.array(markerList)
を試してみて、その形状とDTYPEを見てください。私はそれが1d(200、)とオブジェクトdtypeになると推測しています。
np.array(finalStack)
これはおそらく保存する3次元配列になります。
savemat
は、Python辞書とリストではなく、numpy配列を保存するように設定されています。すべてが2d行列であったMATLABと話しています。 MATLABセルはこれを一般化します。それらはdtypeオブジェクトの2次元配列のようなものです。
サイズが均一な要素からオブジェクト配列を作成する問題が頻繁に発生します。通常の解決策は、所望のサイズ(例えば、(200、))のアレイとオブジェクトタイプを作成し、その中にサブアレイをロードすることである。
https://stackoverflow.com/a/38776674/901925
=============
私が説明します。
In [59]: from scipy import io
In [60]: A=np.ones((40,2))
In [61]: B=np.ones((40,2))
In [62]: C=np.ones((30,2))
保存二つのリスト、ちょうど2つのアレイ、3つのすべてと他との1:3つの配列、ワンサイズの2、および異なる第三くださいそれが戻っ
In [63]: io.savemat('test.mat', {'AB':[A,B],'ABC':[A,B,C]})
ロード。私の代わりにoctave
でこれを行うことができます:
In [65]: D=io.loadmat('test.mat')
In [66]: D.keys()
Out[66]: dict_keys(['ABC', '__header__', 'AB', '__globals__', '__version__'])
ABC
は3つの要素
In [68]: D['ABC'].shape
Out[68]: (1, 3)
In [71]: D['ABC'][0,0].shape
Out[71]: (40, 2)
と2D配列であるが、3D配列にAB
変換されています:代わりに私場合
In [69]: D['AB'].shape
Out[69]: (2, 40, 2)
In [70]: np.array([A,B]).shape
Out[70]: (2, 40, 2)
1次元オブジェクト配列をAとBを保持するようにすると、それは保存されます。
辞書の項目がnumpyのものと背中にMATLAB構造を翻訳の難しさを考えると、それはフラットでシンプルなものに保つのではなく、化合物を作成する方が良いでしょう
io.savemat('test.mat',{'A':A, 'B':B, 'C':C})
として
良い代替は配列を保存することです両面で役に立つオブジェクト。私はOctave
をインストール
===============
。ロードこのtest.mat
:
io.savemat('test.mat', {'AB':AB,'ABs':[A,B]})
は、オブジェクトDTYPE配列は、MATLABセルとして保存され
>> whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
AB 1x2 1280 cell
ABs 2x40x2 1280 double
を与えます。 MATLAB行列として他の配列。 (私は以前の答えをmatlab構造体に相当するものを思い出すために再検討しなければならないだろう)。 savemat documentationを1として
はそうではありません[ XY問題](http://xyproblem.info)Matlabでこれを使用しますか?あるいは、 'scipy.io.savemat'をPythonワークスペースを保存する汎用ライブラリとして使用していますか?なぜなら後者の方が良い選択肢があるからです。 –
しかし、(40,2)配列の(20、)配列を期待していた(200,40,2)配列を保存することは 'savemat'では問題になりません。私の診断が正しければ、numpyが配列のリストを配列に変換する方法に問題があります。 – hpaulj
タソス - これはXYの問題ではありません。基本的に私が扱っているのはMatlabを使い、セルの配列は私が知っているネストされたリストに最も似ています。また、適切な形式で保存されたデータをバッチ処理するためのスクリプトも既に用意されています(それでもやり直せないものではありませんが、やる気にはなりません)。このようなネストされたデータを大量に保存する場合、他の形式は非常にかさばって扱いにくいようです。 – godfreap