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

ljsrvy3e  于 2023-01-08  发布在  Python
关注(0)|答案(2)|浏览(180)

我有一个类似于this的问题,可能要简单得多:
我们使用

k = 1:n;

但是在Python中我很难让这个简单的东西工作。我试着使用arange,但是从来没有真正意识到错误是什么:

>>> 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()

oaxa6hgo

oaxa6hgo1#

欢迎来到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用户。

    • 更新**

开始学习Numpy并熟悉Matlab IDE的Matlab用户的评论。
我建议使用SpyderIPython Notebook

wgeznvg7

wgeznvg72#

对于第一个问题,在numpy中最简单的方法是:

import numpy as np
n = 5
k = np.r_[1:n+1]

以及:

import numpy as np
n = 5
k = np.r_[:n]+1

第一种方法稍微快一点。
For your second question, I see you already found out that you can leave out most of it. There is one additional thing you can do. By default, matplotlib does not update the plot until you do "plt.show()". However, you can change this by doing something like this:

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,如果您使用"ipython--pylab"运行它,它可以处理所有这些问题:

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))

相关问题