首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将matlab代码转换为python

将matlab代码转换为python
EN

Stack Overflow用户
提问于 2013-11-12 19:30:57
回答 1查看 2.6K关注 0票数 5

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

代码语言:javascript
复制
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))

以下是我“翻译”的尝试

代码语言:javascript
复制
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(loaded_file,size,data_type)读取二进制文件的方法。python中的替代方法是使用numpy的here文件并使用内置的reshape函数进行整形(根据这里的线程:MATLAB to Python fread)。我不知道这是如何工作的,甚至与matlab方法有关?很抱歉,如果我的问题混淆了,matlab对我来说还是很新的

编辑:如果你想看,看看这里的文件,它是:https://www.dropbox.com/s/zzm6uvjfm9gpamk/data.eeg

Edit2:原始输入的答案是t=10,ch=32。事实上,我不知道我为什么要用户的输入,现在我想起来了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-12 20:43:19

正如您和@JoeKington在评论中所讨论的那样,这应该有效(我删除了用于测试的输入内容)。

代码语言:javascript
复制
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')

如果没有整形,你就会得到:

代码语言:javascript
复制
In [45]: EEG
Out[45]: array([ -39,  -25,  -22, ..., -168, -586,  -46], dtype=int16)

In [46]: EEG.shape
Out[46]: (128000,)

重塑:

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19938208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档