【问题标题】:Elegant way to create a list of equally spaced arrays创建等距数组列表的优雅方式
【发布时间】:2017-10-09 21:19:38
【问题描述】:

我有一个通过 r0 = np.r_[0, 0, 1] 定义的向量 r0。

我可以定义它的镜像r0 = -r0,也就是np.r_[0, 0, -1]

我想创建一个r0 的列表,如下所示:

0, 0, -1
0, 0, -1 + step
0, 0, -1 + 2*step
...
0, 0, 1

作为 3 列和 (1-(-1))/step 行的数组。

我只能考虑用一个列表来做这件事,然后把它变成一个数组,但我真的很想继续使用数组,因为我将所有代码都转换为向量。

【问题讨论】:

  • 你想要的输出是什么?
  • 3 列和 (1-(-1))/step 行的数组。
  • 您似乎在使用 Numpy。您确实应该在此类问题中添加numpy 标签。

标签: python arrays python-2.7 numpy


【解决方案1】:

你似乎在寻找np.linspace

>>> z_start = -1
>>> z_stop = 1
>>> step = 0.25
>>> np.linspace(z_start, z_stop, num=1+(z_stop-z_start)/step)
array([-1.  , -0.75, -0.5 , -0.25,  0.  ,  0.25,  0.5 ,  0.75,  1.  ])

将它们打包回数组中:

>>> z = np.linspace(z_start, z_stop, num=1+(z_stop-z_start)/step)
>>> n = len(z)
>>> np.vstack([np.zeros(n), np.zeros(n), z]).T
array([[ 0.  ,  0.  , -1.  ],
       [ 0.  ,  0.  , -0.75],
       [ 0.  ,  0.  , -0.5 ],
       [ 0.  ,  0.  , -0.25],
       [ 0.  ,  0.  ,  0.  ],
       [ 0.  ,  0.  ,  0.25],
       [ 0.  ,  0.  ,  0.5 ],
       [ 0.  ,  0.  ,  0.75],
       [ 0.  ,  0.  ,  1.  ]])

【讨论】:

    【解决方案2】:

    您可以创建一个 numpy 数组并拥有部分数据的视图列表。

    import numpy as np
    
    step = 10
    r = np.zeros((step, 3))
    r[:, -1] = np.linspace(-1, 1, step)
    
    r0 = [r[i] for i in range(r.shape[0])]
    
    # r0 == [array([ 0.,  0., -1.]),
    #  array([ 0.,  0., -0.77777778]),
    #  array([ 0.,  0., -0.55555556]),
    #  array([ 0.,  0., -0.33333333]),
    #  array([ 0.,  0., -0.11111111]),
    #  array([ 0.,  0.,  0.11111111]),
    #  array([ 0.,  0.,  0.33333333]),
    #  array([ 0.,  0.,  0.55555556]),
    #  array([ 0.,  0.,  0.77777778]),
    #  array([ 0.,  0.,  1.])]
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 2011-09-19
      相关资源
      最近更新 更多