我認爲你是在談論這樣做的:
In [152]: [50.0, 100.0, 150.0, 5.0, 200.0, 300.0, 10.0, 400.0]
Out[152]: [50.0, 100.0, 150.0, 5.0, 200.0, 300.0, 10.0, 400.0]
In [153]: np.r_[50.0, 100.0:150.0:5.0, 200.0:300.0:10.0, 400.0]
Out[153]:
array([ 50., 100., 105., 110., 115., 120., 125., 130., 135.,
140., 145., 200., 210., 220., 230., 240., 250., 260.,
270., 280., 290., 400.])
我在ipython
編輯添加的:
。我沒有真的在做字符串操作,例如np.r_['50.0', '100.0:150.0:5.0',...]
。
的等效表達式使用slice
:
np.r_[50.0, slice(100.0,150.0,5.0), slice(200.0,300.0,10.0), 400.0]
,或者如果該列表是ll
:
np.r_[ll[0], slice(*ll[1:4]), slice(*ll[4:7]), ll[7]]
在索引上下文[]
,所述a:b:c
表達式被轉換成切片對象,slice(a,b,c)
。 r_
然後將其轉換爲arange(a,b,c)
,然後連接它們。
所以有效的r_
表達式爲:
np.concatenate([ [ll[0]], np.arange(*ll[1:4]), np.arange(*ll[4:7]), [ll[7]] ])
在分組中間值3的並且把它們放在片的numpy的方法是:
In [166]: [slice(*ii) for ii in np.array(ll[1:-1]).reshape(-1,3)]
Out[166]: [slice(100.0, 150.0, 5.0), slice(200.0, 300.0, 10.0)]
(這是一個alterantive爲@摩西使用iter
)。但是在np.r_
(甚至是np.concatenate
)中嵌入這種列表是棘手的。
它可以更容易地在arange
直接產生:
In [189]: subl = [np.arange(*ii) for ii in np.array(ll[1:-1]).reshape(-1,3)]
In [190]: subl
Out[190]:
[array([ 100., 105., 110., 115., 120., 125., 130., 135., 140., 145.]),
array([ 200., 210., 220., 230., 240., 250., 260., 270., 280., 290.])]
In [191]: np.concatenate([[ll[0]]]+subl+[[ll[-1]]])
Out[191]:
array([ 50., 100., 105., 110., 115., 120., 125., 130., 135.,
140., 145., 200., 210., 220., 230., 240., 250., 260.,
270., 280., 290., 400.])
不應該'100.0:150。0:5'是一個字符串? –
我將用戶提供的列表作爲字符串[50.0,100.0:150:5.0,200.0:300.0:10.0,400.0],然後將其分隔到分隔符'::'上,以便我可以將其轉換爲浮點數。現在我想添加回':'分隔符。 Numpy_r不會將輸入作爲字符串,因此間隔100.0:150.0:5.0和200.0:300.0:10.0不能是字符串 – user1332577
我希望它們是浮動的。 numpy.r_使用逗號分隔的數組。 – user1332577