用序列创建的numpy数组

lll*_*lll 17 python arrays numpy sequence scipy

我正在从MATLAB到scipy(+ numpy)+ matplotlib的过渡之旅.在实施某些事情时我一直遇到问题.我想在三个不同的部分创建一个简单的矢量数组.在MATLAB中,我会做类似的事情:

vector=[0.2,1:60,60.8];
Run Code Online (Sandbox Code Playgroud)

这导致62个位置的一维阵列.我正在尝试使用scipy来实现它.我现在最接近的是:

a=[[0.2],linspace(1,60,60),[60.8]]
Run Code Online (Sandbox Code Playgroud)

然而,这会创建一个列表,而不是一个数组,因此我无法将其重新整形为矢量数组.但是,当我这样做时,我得到一个错误

a=array([[0.2],linspace(1,60,60),[60.8]])
ValueError: setting an array element with a sequence.
Run Code Online (Sandbox Code Playgroud)

我相信我的主要障碍是我无法弄清楚如何在MATLAB中翻译这个简单的操作:

a=[1:2:20];
Run Code Online (Sandbox Code Playgroud)

笨拙 我知道如何访问数组中的位置,尽管不是在创建序列时.任何帮助将不胜感激,谢谢!

dou*_*oug 15

NumPy实现MATLAB的数组创建函数vector,使用两个函数而不是一个 - 每个函数隐式指定一个特定的轴,沿着该轴应该发生串联.这些功能是:

  • r_(行方式连接)和

  • c_(逐栏)


因此,对于您的示例,NumPy等价物是:

>>> import numpy as NP

>>> v = NP.r_[.2, 1:10, 60.8]

>>> print(v)
     [  0.2   1.    2.    3.    4.    5.    6.    7.    8.    9.   60.8]
Run Code Online (Sandbox Code Playgroud)

列式对应方是:

>>> NP.c_[.2, 1:10, 60.8]
Run Code Online (Sandbox Code Playgroud)

切片表示法按预期工作[ start:stop:step ]:

>>> v = NP.r_[.2, 1:25:7, 60.8]

>>> v
  array([  0.2,   1. ,   8. ,  15. ,  22. ,  60.8])
Run Code Online (Sandbox Code Playgroud)

虽然如果使用虚数作为第三个参数,切片符号的行为类似于linspace:

>>> v = NP.r_[.2, 1:25:7j, 60.8]

>>> v
  array([  0.2,   1. ,   5. ,   9. ,  13. ,  17. ,  21. ,  25. ,  60.8])
Run Code Online (Sandbox Code Playgroud)


否则,它像人气指数:

>>> v = NP.r_[.2, 1:25:7, 60.8]

>>> v
  array([  0.2,   1. ,   8. ,  15. ,  22. ,  60.8])
Run Code Online (Sandbox Code Playgroud)


Jos*_*del 5

你可以尝试类似的东西:

a = np.hstack(([0.2],np.linspace(1,60,60),[60.8]))
Run Code Online (Sandbox Code Playgroud)