IPython
IPython是一个更好的Python Shell,在标准Python Shell基础之上提供一些扩展,让Python shell更易用。

安装
在Windows Python 2.x上安装IPython需要下载两个Python扩展,一个是IPython,一个是pyreadline,pyreadline其实不是必须的,但安装后会有更好的shell体验。
安装后会在程序菜单中看到IPython的启动快捷方式,也可以直接执行Python目录下的Scripts下的ipython.py来启动IPython。
Tab补齐
在IPython里,可以使用Tab来做自动补齐,几乎所有的输入都可以用到这个Tab补齐,比如Python语法,包名,接口名等,这是IPython对大部分使用者最方便的地方,尤其是初学者。
即时帮助
另一个很好用的功能是在IPython中,我们可以在很多语句后面加问号,来获得即时的帮助,比如输入 os.path.join ? 回车, 就可以看到这个API的帮助了。
命令历史和宏
IPython中所有输入的命令历史被记录在一个数组中,可以用In[n]来引用这些历史命令字符串,因此 exec In[10]就是重新执行历史中的第10条命令,我们也可以用macro macro_name 2-5 8 这样的命令来把2到5,以及第8条,一共四条命令保存在macro_name这个宏中。直接输入 macro_name 回车就可以执行这个宏了。
然后用store macro_name 来把这个宏保存,这样可以在下次启动IPython之后,依然可用这个宏。把一些常用的多条命令录制成宏,还不错。
update(2010-04-13): 如果是需要GUI的Python Shell,可以尝试wxPython下的PyShell,它有很多类似IPython的功能,注意:不是Sourceforge上那个Pyshell,两个只是同名而已。
我最近也开始使用IPython,IPython在安装了pyreadline之后应该是可以支持语法高亮功能的,但是使用的时候就像你的截图里面的一样,除了可以看到In[]和??的帮助信息是高亮了的,本身我们的即时输入并没有被高亮。设置%colors Linux ; %color_info ON也不行。要如何设置才能实现即时输入的高亮呢?
@jeans3 还有”即时高亮”? 我没发现这个功能的。
@jean3 也许你可以试试wxPython下的PyShell,有你要的即时高亮功能,也可以像IPython一样自动完成,不过要安装wxPython和它的dmeo。
请问编好的程序怎么保存啊,
@gaoya IPython只是一个Shell,不是编辑器,如果需要保存的话,可以用%save命令,将历史命令转存到文件的。
%save怎么保存啊,举个例子吧,谢谢啊!
保存后的文件能打开吗,
@gaoya save是用来将历史命令保存到一个文本文件的,比如 save d:\myhistory 0-4 就会将历史命令列表的中前4条存到 d:\myhistory.py了,不过这只用来保存命令历史,并不是用来编辑Python代码的,编辑Python代码,你需要一个好用的文本编辑器或者Python IDE。
谢谢,能帮我把一个matlab程序改成python语言吗,谢谢!
K=8; % 稀疏度
N=256; % 信号长度
M=64; % 测量数(M>=K*log(N/K),至少40,但有出错的概率)
f1=50; % 信号频率1
f2=100; % 信号频率2
f3=200; % 信号频率3
f4=400; % 信号频率4
fs=800; % 采样频率
ts=1/fs; % 采样间隔
Ts=1:N; % 采样序列
x=0.3*sin(2*pi*f1*Ts*ts)+0.6*sin(2*pi*f2*Ts*ts)+0.1*sin(2*pi*f3*Ts*ts)+0.9*sin(2*pi*f4*Ts*ts); % 完整信号
%% 2. 时域信号压缩传感
Phi=randn(M,N); % 测量矩阵(高斯分布白噪声)
s=Phi*x.’; % 获得线性测量
%% 3. 正交匹配追踪法重构信号(本质上是L_1范数最优化问题)
m=2*K; % 算法迭代次数(m>=K)
Psi=fft(eye(N,N))/sqrt(N); % 傅里叶正变换矩阵
T=Phi*Psi’; % 恢复矩阵(测量矩阵*正交反变换矩阵)
hat_y=zeros(1,N); % 待重构的谱域(变换域)向量
Aug_t=[]; % 增量矩阵(初始值为空矩阵)
r_n=s; % 残差值
for times=1:m; % 迭代次数
for col=1:N; % 恢复矩阵的所有列向量
product(col)=abs(T(:,col)’*r_n); % 恢复矩阵的列向量和残差的投影系数(内积值)
end
[val,pos]=max(product); % 最大投影系数对应的位置
Aug_t=[Aug_t,T(:,pos)]; % 矩阵扩充
T(:,pos)=zeros(M,1); % 选中的列置零(实质上应该去掉,为了简单我把它置零)
aug_y=(Aug_t’*Aug_t)^(-1)*Aug_t’*s; % 最小二乘,使残差最小
r_n=s-Aug_t*aug_y; % 残差
pos_array(times)=pos; % 纪录最大投影系数的位置
end
hat_y(pos_array)=aug_y; % 重构的谱域向量
hat_x=real(Psi’*hat_y.’); % 做逆傅里叶变换重构得到时域信号
%% 4. 恢复信号和原始信号对比
figure(1);
hold on;
plot(hat_x,’k.-’) % 重建信号
plot(x,’r') % 原始信号
legend(’Recovery’,'Original’)
norm(hat_x.’-x)/norm(x)
@gaoya 我不懂Matlab,不过语法上转换应该问题不大,只是那些数学函数在python做起来可能有些麻烦的,python自己的math库的数学函数应该是不如matlab丰富的。。
%save怎么保存啊,举个例子吧,谢谢啊!