将matlab中的数组1:n转换为python

时间:2014-04-15 09:34:38

标签: python matlab numpy

我的问题类似于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()

2 个答案:

答案 0 :(得分:1)

欢迎来到Numpy!

1:narange(1, n+1, 1)相同,其中第一个1开始,n+1停止,最后1为步骤。请注意,Numpy索引从0开始,而Matlab是1。所以我想

np.arange(0, n, 1) # will generate 0, 1, ..., n-1

更适合数组索引。

[]表示可选值。如果您没有给出明确的值,start0step1。你可以使用

np.arange(n) # will generate 0, 1, ..., n-1

This page帮助Matlab用户。

<强>更新

评论Matlab开始学习Numpy且熟悉Matlab IDE的用户。

我建议使用SpyderIPython Notebook

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))
相关问题