簡體   English   中英

優雅的方式來創建等間距數組的列表

[英]Elegant way to create a list of equally spaced arrays

我有一個通過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))/步驟行的數組。

我只能想到用列表做這個然后把它變成一個數組,但我真的想繼續使用數組,因為我將所有代碼轉換為向量。

您似乎在尋找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.  ]])

您可以創建一個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.])]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM