SciPyとMATLABを使用して、scipy.io.loadmat()を使用してロードされたMATLABセル配列から与えられたものと一致するように配列を再構築するのに問題があります。
たとえば、MATLABで二重配列のペアを含むセルを作成し、scipy.ioを使用してロードするとします(SPMを使用してpyniftiなどと組み合わせてイメージング分析を実行しています)
MATLAB
>> onsets{1} = [0 30 60 90]
>> onsets{2} = [15 45 75 105]
Python
>>> import scipy.io as scio
>>> mat = scio.loadmat('onsets.mat')
>>> mat['onsets'][0]
array([[[ 0 30 60 90]], [[ 15 45 75 105]]], dtype=object)
>>> mat['onsets'][0].shape
(2,)
私の質問はこれです:なぜこのnumpy配列は(2,1,4)ではなく(2、)の形をしているのですか?実生活では、Pythonを使用してログファイルを解析し、これらの開始セル配列を構築しようとしているので、最初から構築できるようにしたいと考えています。
印刷された出力から同じ配列を作成しようとすると、異なる形状が返されます。
>>> new_onsets = array([[[ 0, 30, 60, 90]], [[ 15, 45, 75, 105]]], dtype=object)
array([[[0, 30, 60, 90]],
[[15, 45, 75, 105]]], dtype=object)
>>> new_onsets.shape
(2,1,4)
残念ながら、形状(セル配列内のdoubleのベクトル)はアップストリームの仕様でコード化されているため、これをこの形式で正確に保存できるようにする必要があります。もちろん、MATLABでパーサーを書くことができたので、大したことではありませんが、何が起こっているのかを理解し、numpyに関する私の[小さな]知識に少し追加するとよいでしょう。