from __future__ import division
from numpy import *
import matplotlib as plt
import os
clear = lambda: os.system('cls')
clear() # clear screen
meu=1e-05 # exponential form
x1=load(char('neweeg.txt'))
x=x1(arange(1,5000))
xx=x1(arange(5001,10000))
N=length(x)
X=zeros(4,1)
w=rand(4,1)
for n in arange(1,N).reshape(-1):
X[arange(2,end())]=X(arange(1,end() - 1))
X[1]=x(n)
y[n]=w.T * X
e[n]=x(n) - y(n)
w=w + meu * e(n) * X
J[n]=e(n) * e(n)
MSE=mean(J,1)
plt.plot(10 * log10(MSE))
plt.figure
plt.plot(x)
hold(char('on'))
plt.plot(y,char('r'))
plt.figure
plot(xx - (e).T)
hold(char('on'))
plt.plot(xx,char('r'))
错误
file "/home/pi/Documents/final.py", line 10, in <module>
x1=load(char('neweeg.txt'))
typeError: 'module' object is not callable
答案 0 :(得分:0)
我认为即时错误是因为你使用char()就像它是一个函数一样。你想要的是什么并不明显(在函数chr()中有一个python来生成整数字符)
然后不清楚你想要做什么。 numpy.load()将读取由numpy.save()生成的pickle数组,但如果它是一个文本文件,那么numpy.loadtxt()似乎更相关。但是x1将是一个ndarray,因此在接下来的两行中将它用作x1()的函数是没有意义的。也是length()len()? rand(4,1)random.randint(1,4)或numpy.random.randint(1,4)?正如安东所说,你只需要通过修复错误来解决问题,在文档中查找内容。
最后,如果您没有导入*,它会让您和其他人更清楚,但会为您认为正在使用的模块名称添加前缀。
答案 1 :(得分:0)
这是Matlab代码100%正常工作。并尝试将其转换为Python
clc;
close all;
clear all;
meu = 0.00001;
x1=load('neweeg.txt');
x = x1(1:5000);
xx =x1 (5001:10000);
N = length(x);
X = zeros(4,1);
w = rand(4,1);
for n = 1:N
X(2:end) = X(1:end-1);
X(1) = x(n);
y(n) = w'*X;
e(n) = x(n) - y(n);
w = w + meu*e(n)*X;
J(n) = e(n)*e(n);
end
MSE = mean(J,1);
plot(10*log10(MSE))
title('MSE')
figure
plot(x);hold on; plot(y,'r')
title('X and Y')
figure;
plot(xx-(e)')
hold on
plot(xx,'r')
title('XX-(e) or XX')