我的问题类似于this,可能更简单:
我们使用
k = 1:n;
在Matlab中有很多。但是在Python中我只是很难让这个简单的事情发挥作用。我尝试使用范围,但从未真正意识到错误是什么:
>>> arange(1,]10[,1,])
File "<stdin>", line 1
arange(1,]10[,1,])
^
SyntaxError: invalid syntax
>>> arange(1,10[,1,])
File "<stdin>", line 1
arange(1,10[,1,])
^
SyntaxError: invalid syntax
>>> arange([1,]10[,1,])
File "<stdin>", line 1
arange([1,]10[,1,])
^
SyntaxError: invalid syntax
>>> np.arange
<built-in function arange>
>>> arange([1], 10[,1])
File "<stdin>", line 1
arange([1], 10[,1])
^
SyntaxError: invalid syntax
我去了numpy website并尝试在那里提供语法,但是又一次:
>>> import numpy as np
>>> np.arange([1],10[,1],dtype=None)
File "<stdin>", line 1
np.arange([1],10[,1],dtype=None)
^
SyntaxError: invalid syntax
我不会写这篇文章只是为了澄清这类事情,但我的观点是为什么这个最简单的Matlab命令在Python中如此复杂?我甚至使用this tool将.m代码转换为.py代码,效果甚微。
@mskimm发帖后编辑:谢谢!一个相关的问题。在Matlab中编写与以下内容非常相似的内容:
n = 100;
k = 1:n;
z = (n-k)./(n-k-1);
plot(k,log(z))
我最后用Python编写了这个:
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
# test code to check the shape of a curve
n = 100
k = np.arange(1,n+1)
z = (n - k) / (n - k - 1)
fig = plt.figure()
ax = fig.gca()
plt.plot(k, np.log(z))
plt.show()
这是正确的做法吗?或者有更好的方法来执行plot()
?
答案 0 :(得分:1)
欢迎来到Numpy!
1:n
与arange(1, n+1, 1)
相同,其中第一个1
开始,n+1
停止,最后1
为步骤。请注意,Numpy索引从0
开始,而Matlab是1
。所以我想
np.arange(0, n, 1) # will generate 0, 1, ..., n-1
更适合数组索引。
[]
表示可选值。如果您没有给出明确的值,start
为0
,step
为1
。你可以使用
np.arange(n) # will generate 0, 1, ..., n-1
This page帮助Matlab用户。
<强>更新强>
评论Matlab开始学习Numpy且熟悉Matlab IDE的用户。
我建议使用Spyder或IPython Notebook。
答案 1 :(得分:0)
对于您的第一个问题,在numpy中执行此操作的最简单方法是:
import numpy as np
n = 5
k = np.r_[1:n+1]
和
import numpy as np
n = 5
k = np.r_[:n]+1
第一种方法要快一点。
对于你的第二个问题,我发现你已经发现你可以忽略大部分问题。还有一件事你可以做。默认情况下,在执行&#34; plt.show()&#34;之前,matplotlib不会更新绘图。但是,您可以通过执行以下操作来更改此操作:
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
plt.interactive(True)
# test code to check the shape of a curve
n = 100
k = np.r_[1:n+1]
z = (n - k) / (n - k - 1)
plt.plot(k, np.log(z))
首次启动时只需要执行一次,并且可以在以后设置为False。
您也可以通过打开matplotlibrc文件并更改来配置matplotlib以执行此操作:
#interactive : False
到
interactive : True
但是,您最好使用IPython,如果您使用&#34; ipython --pylab&#34;
运行它,它将处理所有这些问题。from __future__ import division
# test code to check the shape of a curve
n = 100
k = r_[1:n+1]
z = (n - k) / (n - k - 1)
plot(k, log(z))