将Matlab代码转换为python

发布于 2021-01-29 14:56:42

好的,所以我有一个来自EEG扫描的数据文件(一个二进制文件,data.eeg),在matlab中,用于读取文件并绘制部分数据的代码如下所示:

sr=400;                                                     % Sample Rate
Nyq_freq=sr/2;                                              % Nyquist Frequency
fneeg=input('Filename  (with path and extension) :', 's');  
t=input('How many seconds in total of EEG ? : ');
ch=input('How many channels of EEG ? : ');
le=t*sr;                                                    % Length of the Recording
fid=fopen(fneeg, 'r', 'l');                                 % Open the file to read 
EEG=fread(fid,[ch,le],'int16');                             % Read Data -> EEG Matrix
fclose ('all');     
plot(EEG(:,3))

这是我的“翻译”尝试

from numpy import *
from matplotlib.pylab import *

sample_rate = 400
Nyquist = sample_rate/2.
fneeg = raw_input("Filename (full path & extension): ")
t = int(raw_input("How many secs in total of EEG?: "))
ch = int(raw_input("How many channels of EEG?: "))
le = t*sample_rate
fid = open(fneeg, 'r')
EEG = fromfile(fneeg, int16)

这就是让我感到困惑的地方。根据文档,matlab的fread是一种通过fread(loaded_file,size,data_type)读取二进制文件的方法。python中的替代方法是使用numpy的fromfile并使用内置的reshape函数进行重塑(根据此处的线程:MATLAB
to Python fread
)。我不确定这是如何工作的,甚至与matlab方法有关?如果我的问题令人困惑,对不起,matlab对我来说还是很新的

编辑:如果您想看一下这里的文件,则为:https
:
//www.dropbox.com/s/zzm6uvjfm9gpamk/data.eeg

编辑2:原始输入的答案是t = 10,ch = 32。事实上,我不确定为什么现在考虑后为什么还要输入用户信息。

关注者
0
被浏览
103
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    正如您自己和@JoeKington在评论中所讨论的,这应该可以工作(我删除了输入内容进行测试)

    import numpy as np
    
    sample_rate = 400
    Nyquist = sample_rate/2.0
    fneeg = 'data.eeg'
    t = 10 
    ch = 32
    le = t*sample_rate
    EEG = np.fromfile(fneeg, 'int16').reshape(ch, le, order='F')
    

    如果不进行重塑,您将获得:

    In [45]: EEG
    Out[45]: array([ -39,  -25,  -22, ..., -168, -586,  -46], dtype=int16)
    
    In [46]: EEG.shape
    Out[46]: (128000,)
    

    重塑:

    In [47]: EEG.reshape(ch, le, order='F')
    Out[47]: 
    array([[ -39,  -37,  -12, ...,    5,   19,   21],
           [ -25,  -20,    7, ...,   20,   36,   36],
           [ -22,  -20,    0, ...,   18,   34,   36],
           ..., 
           [ 104,  164,   44, ...,   60,  -67, -168],
           [ 531,  582,   88, ...,   29, -420, -586],
           [ -60,  -63,  -92, ...,  -17,  -44,  -46]], dtype=int16)
    
    In [48]: EEG.reshape(ch, le, order='F').shape
    Out[48]: (32, 4000)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看