尝试使用scipy.sio绘制.mat文件(Matlab)时需要一些帮助。 不确定我还需要做什么才能绘制数据。我希望读者可以按照下面粘贴的内容进行操作。
import scipy as sio
mat_contents = sio.loadmat('abc.mat')
sio.whosmat('abc.mat')
结果=
[('**ctrllef**t', (1, 1), 'struct'),
('ctrlright', (1, 1), 'struct'),
('ioleft', (1, 1), 'struct'),
('ioright', (1, 1), 'struct'),
('faultleft', (1, 1), 'struct'),
('faultright', (1, 1), 'struct'),
('validleft', (1, 1), 'struct'),
('validright', (1, 1), 'struct'),
('ovdleft', (1, 1), 'struct'),
('ovdright', (1, 1), 'struct')]
mat_a = mat_contents['**ctrlleft**']
import numpy as np
import matplotlib.pyplot as pp
pp.plot(mat_a, mat_contents, 'x')
**Result =** ValueError: Can't cast from structure to non-structure, except if the structure only has a single field
from pylab import *
from matplotlib import *
matshow(mat_a)
结果= TypeError: Image data cannot be converted to float
答案 0 :(得分:0)
基于('**ctrllef**t', (1, 1), 'struct')
我会说mat_a
是一个(1,1)对象dtype数组。 mat_a.item()
可能是一个结构化数组,MATLAB struct
对象的每个属性都有一个字段。可以按名称访问此类数组的字段。
我经常只ipython
显示mat_contents
mat_a.item()
,或者mat_a.item().dtype
太大了.shape
。 loadmat
也是一个有用的展示,ndarray
。
您需要按照plot
生成的数据结构的方式工作,直到获得可以传递给mat_contents
的{{1}}。在不了解MATLAB数据结构的情况下,我无法预测numpy
是什么样的。即便如此,我发现在loadmat
会话中以交互方式探索该对象更容易。
struct
生成的对象类型已在许多以前的SO问题中讨论过。由于MATLAB源不同,我们只能给出一般指导原则。
最近将MATLAB numpy
传递给123
的方法的例子:
How can I create a Matlab file from Python with multi-dimensional arrays in a Matlab data structure?