我需要的是根据大于2的单个数字将0除以1。 像5号这样被分割
0.00
0.25
0.50
0.75
1.00
列表中有5个值
我的另一个问题是如何获得这样的序列,其中中间数字是1,第一个和最后一个数字是0(如果数字是10)。
0.00
0.25
0.50
0.75
1.00
1.00
0.75
0.50
0.25
0.00
列表中的10个项目 如何通过循环在python中做到这一点?
答案 0 :(得分:2)
从numpy linspace文档中:
在指定的间隔内返回均等的数字。
正是我们需要解决的第一个问题。
import numpy as np
def spread(n):
return np.linspace(0, 1, n)
对于第二个问题,我们可以仅重用第一个问题中的数组,将其求逆并追加。我们只需将//
的数字除以2(假设可以被2整除)就可以将数字传递给spread
。您可以通过以下步骤获得列表/元组/ numpy数组的反向版本:
my_list[::-1]
因此您的函数应类似于:
import numpy as np
def updown(n):
first_half = spread(n//2)
return np.r_[first_half, first_half[::-1]]
您还可以使用np.flipud翻转数组,而可以使用np.r_代替np.concatenate:
import numpy as np
def updown(n):
first_half = spread(n//2)
return np.concatenate((first_half, np.flipud(first_half)))
或者如果最终不需要数组,可以这样做(与其他答案相同):
import numpy as np
def spread(n):
return list(np.linspace(0, 1, n))
def updown(n):
first_half = spread(n//2)
return first_half + first_half[::-1]
答案 1 :(得分:1)
第一部分很简单:
def spread(n):
return tuple(i/(n-1) for i in range(n))
然后,您可以通过将上方的元组与反向的元组连接起来来创建第二个:
def updown(n):
tpl = spread(n//2)
return tpl + tpl[::-1]
如果n
为奇数updown(n)
将与updown(n-1)
...