распространение / деление (от 0,0 до 1,0) на одно число или диапазон (0, инф) - PullRequest
0 голосов
/ 26 сентября 2018

Что мне нужно, так это разделить / распределить 0 на 1. по одному числу, которое больше 2. Как и число 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 в спискеэто в питоне через цикл?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Равномерно распределенные числа

Из документации numy linspace :

Возвращение равномерно распределенных чисел за указанный интервал.

Именно то, что нам нужно для решения вашей первой проблемы.

Пример кода

import numpy as np

def spread(n):
    return np.linspace(0, 1, n)

Зеркальное отображение списка

Для второго вопроса мы можем просто повторно использовать массив из первого вопроса, переверните его и добавьте.Нам просто нужно целочисленно разделить // ваше число на 2 (при условии, что оно делится на 2), чтобы число перешло на spread.Вы получаете обратную версию массива list / tuple / 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]
0 голосов
/ 26 сентября 2018

первая часть проста:

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

...