在尝试绘制mat(Matlab)文件时,从matplotlib和pylab绘制错误

时间:2018-06-13 19:44:20

标签: numpy matplotlib scipy

尝试使用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

1 个答案:

答案 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太大了.shapeloadmat也是一个有用的展示,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?