I have question similar to this, and possibly a much simpler one:
We use the
k = 1:n;
a lot in Matlab. But in Python I simply struggle to get this simple thing work. I tried using arange, but never really realized what the error is:
>>> 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
I went to the numpy website and tried to give the syntax there, but again:
>>> 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
I wouldn’t have written this post just to clarify something of this sort, but my point is why is this simplest Matlab command so very complicated in Python? I even used this tool to convert .m codes to .py codes, with little effect.
EDIT after the post from @mskimm: Thanks! One related question. To write something very similar to the following in Matlab:
n = 100; k = 1:n; z = (n-k)./(n-k-1); plot(k,log(z))
I ended up writing this in 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()
Is this the right way of doing it? Or there is a better way of doing the plot()
?
Advertisement
Answer
Welcome to Numpy!
1:n
is the same as arange(1, n+1, 1)
where the first 1
is start, n+1
is stop, and the last 1
is step. Note that Numpy index is started at 0
whereas Matlab is 1
. So I think
np.arange(0, n, 1) # will generate 0, 1, ..., n-1
is more appropriate to array indexing.
[]
means optional value. If you don’t give an explicit value, start
is 0
and step
is 1
. You can use
np.arange(n) # will generate 0, 1, ..., n-1
This page helps Matlab users.
UPDATE
Comment for Matlab Users who start learning Numpy and is familiar with Matlab IDE.
I recommend to use Spyder or IPython Notebook.