用一个数字或范围(0,inf)进行扩频/除法(0.0到1.0)

时间:2018-09-26 12:15:51

标签: python normalization

我需要的是根据大于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中做到这一点?

2 个答案:

答案 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) ...