Найти - Пользователи
Полная версия: Сгенерирывать массив вещественных с не эквидистантным шагом
Начало » Python для новичков » Сгенерирывать массив вещественных с не эквидистантным шагом
1 2 3
ElfStone
Всем привет!
Собственно, как сгенерировать последовательность в указанном диапазоне с экспоненциальным шагом? -
Я пробовал использовать numpy:logspace,linspace,arrang. Геометрическую прогрессию сгенерировать вполне реально, но переменного шага добиться не получается.

Спасибо!
Rodegast
Так подойдёт?
>>> import math
>>> map(math.exp, xrange(10))
[1.0, 2.718281828459045, 7.38905609893065, 20.085536923187668, 54.598150033144236, 148.4131591025766, 403.4287934927351, 1096.6331584284
585, 2980.9579870417283, 8103.083927575384]
Janko
Это только в python 2.x будет работать, где есть xrange(). Вот нагуглил такое
Rodegast
> Это только в python 2.x будет работать, где есть xrange()

Конечно. В 3.х надо писать range.
Janko
Ну ок, но range() для другого - он целочисленный тип только принимает
ElfStone
map(math.exp, xrange(10))/map(math.exp, range(10)) - конечно красиво, но смысл экспоненциального шага не в том что разность между соседними элементами составляет 2.7 а в том что сам шаг изменяется. Т.е. этот код как раз пример линейного шага и рабочий
py.user.next
ElfStone
Собственно, как сгенерировать последовательность в указанном диапазоне с экспоненциальным шагом?
Приведи пример последовательности и шагов в ней.

ElfStone
но смысл экспоненциального шага не в том что разность между соседними элементами составляет 2.7 а в том что сам шаг изменяется
Неэквидистантный и экспоненциальный - это разные понятия.
old_monty
ElfStone
Собственно, как сгенерировать последовательность в указанном диапазоне с экспоненциальным шагом?
Сделать точно экспоненциальный шаг не получится - понятно, что шаг в итерациях может быть только целым числом. Но можно легко сделать переменный (или, как вы его называете, “не эквидистантный”) целочисленный шаг, у которого с точностью до округления к ближайшему целому изменение следует экспоненциальному закону:
from math import exp, ceil
X = list(map(lambda i: ceil(exp(i)), range(5)))
Y = list(range(56)) # элементы int в списке только для простоты, вообще можно любые
Z = [] # сюда добавляем элементы из Y, выбирая их с (почти) экспоненциально меняющимся шагом
for i in X:
   Z.append(Y[i])
py.user.next
old_monty
шаг в итерациях может быть только целым числом
Шаг может быть любым числом, хоть комплексным. Ему просто range() не подходит.
Rodegast
> Ну ок, но range() для другого - он целочисленный тип только принимает

А мы ему челочисленный тип и передаём Просто сначала генерим целочисловую последовательность, а потом к ней применяем нужную функцию и получаем то что хотим.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB