如何在1行代码中加载具有2个数组的MATLAB文件

时间:2016-06-22 17:52:22

标签: arrays matlab python-3.x numpy dictionary

我有1个文件,里面有2个数组(x和y)。 这是字典键:

    dict_keys(['__version__', 'x', '__header__', 'y', '__globals__'])

这些是我编写的用于在没有dict_keys的情况下调用我的数组的指令:

    x=sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')['x']
    y=sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')['y']

有没有办法只使用一行代码执行此操作?

到目前为止,我已经尝试过这个但没有成功:

    x_y=sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')['x']['y']


    x_y=(sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')(['x','y']))

    x_y=sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')(['x']['y'])

    x_y=(sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')(['x']['y']))

2 个答案:

答案 0 :(得分:3)

一行中执行此操作真的很重要吗?想要只调用一次loadmat()是有意义的,但坚持一行似乎是不必要的。这看起来非常简单:

features = sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')
x = features['x']
y = features['y']

答案 1 :(得分:1)

如果你坚持单行,这将有效:

x_y = {k:v for (k, v) in sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat').items() if k in {'x', 'y'}}  

(需要Python 3.x或2.7)

它只运行loadmat一次,然后使用字典理解循环其内容,只选择(k, v)对中k(密钥)包含在集合{'x', 'y'}中1}}。

它是一个MAT文件并不重要。它适用于.items()方法的行为类似于dict.items()的任何对象。

如果您仍在使用Python 2.7,则可能希望将.items()替换为.iteritems()以获得更好的性能。