Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab代码到python的转换_Python_Matlab_Numpy - Fatal编程技术网

matlab代码到python的转换

matlab代码到python的转换,python,matlab,numpy,Python,Matlab,Numpy,好的,我有一个来自EEG扫描的数据文件(一个二进制文件,data.EEG),在matlab中,读取文件并绘制数据部分的代码如下: sr=400; % Sample Rate Nyq_freq=sr/2; % Nyquist Frequency fneeg=input('Filename (with pa

好的,我有一个来自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))
以下是我的“翻译”尝试

这就是让我感到困惑的地方。根据文档,matlab的fread是一种通过fread(加载的文件、大小、数据类型)读取二进制文件的方法。python中的替代方法是使用numpy的fromfile,并使用内置的整形函数进行整形(根据这里的线程:)。我不确定这是如何工作的,甚至与matlab方法有关?如果我的问题让人困惑,我很抱歉,matlab对我来说还是很新的

编辑:如果您想查看,请查看以下文件:


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

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

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

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)

你能发布输入文件的示例吗?听起来你已经回答了自己的问题。据我所知,您只需要
eeg=numpy.fromfile(文件名,'int16')。重塑(ch,le)
。此外,如果愿意,您可以跳过显式打开文件
fromfile
将接受文件名和文件对象。我在编辑中添加了指向数据的链接@JoeKington,这也是我的理由,但为什么我们需要重塑?我不明白原因,你知道我的意思吗?@Norman,
np.fromfile
只返回一个1d数组(长度
ch*le
,但您希望它是
ch
X
le
矩阵。
重塑
只需进行此更改,而不涉及数据本身。@NormanB,您是否正在使用Neuroscan?我正在尝试导入Neuroscan文件(.cnt或.eeg)哈哈,不客气,但这要归功于你和@Joe:PNormanB-只是顺便说一句,matlab可能使用列主顺序而不是行主顺序…在这种情况下,结果可能是以列主顺序写入磁盘的,而您可以从文件(…)执行
fromfile(…).Reforme(le,ch).T
(注意,
le
ch
是交换的)。无论如何,这只是需要注意的。如果您的数据看起来乱七八糟,请尝试一下。哦,是的,您是对的,确实如此()。很好的捕获!这实际上是从ipython(而不是笔记本)复制和粘贴的.ipython笔记本和标准python解释器之间的一个很好的折衷。很好的捕获,@Joe!一个更简单的修复方法是使用
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)