Как использовать десятичное значение шага ()?

Я использовал Eclipse Juno, и я не помнил, было ли это 32 или 64 бит. Я установил Java 32 бита, и поэтому он не удался. Затем я установил Java 64 бит, а Eclipse Juno снова работает.

Я также удалил ссылку java или jre в переменных среды (PATH).

640
задан martineau 8 February 2017 в 22:37
поделиться

7 ответов

Вместо того, чтобы использовать десятичный шаг непосредственно, намного более безопасно выразить это с точки зрения того, сколько точек Вы хотите. Иначе погрешность округления с плавающей точкой, вероятно, даст Вам неправильный результат.

можно использовать эти linspace функция от библиотека NumPy (который не является частью стандартной библиотеки, но относительно легок получить). linspace берет ряд вопросов для возврата и также позволяет Вам указать, включать ли правильную конечную точку:

>>> np.linspace(0,1,11)
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1. ])
>>> np.linspace(0,1,10,endpoint=False)
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])

, Если Вы действительно хотите использовать значение шага с плавающей точкой, Вы можете, с numpy.arange.

>>> import numpy as np
>>> np.arange(0.0, 1.0, 0.1)
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])

погрешность округления С плавающей точкой будет проблемы причины, все же. Вот простой случай, где погрешность округления заставляет arange производить длину 4 массива, когда это должно только произвести 3 числа:

>>> numpy.arange(1, 1.3, 0.1)
array([1. , 1.1, 1.2, 1.3])
800
ответ дан user2357112 9 February 2017 в 08:37
поделиться
  • 1
    Решенный моя проблема. Upvoted из-за его краткости. – Skitterm 10 August 2012 в 17:08

Здание 'xrange ([запускаются], остановитесь [шаг])', , можно определить генератор, который принимает и производит любой тип, который Вы выбираете (придерживайтесь типов, поддерживающих + и <):

>>> def drange(start, stop, step):
...     r = start
...     while r < stop:
...         yield r
...         r += step
...         
>>> i0=drange(0.0, 1.0, 0.1)
>>> ["%g" % x for x in i0]
['0', '0.1', '0.2', '0.3', '0.4', '0.5', '0.6', '0.7', '0.8', '0.9', '1']
>>> 
144
ответ дан gimel 9 February 2017 в 08:37
поделиться
  • 1
    Спасибо!!! Вы сохраняете меня несколько часов, кодируя. I' ll проверяют Ваш код, ожидают моих комментариев;) – diegocaro 7 May 2012 в 16:41

Диапазон () встроенная функция возвращает последовательность целочисленных значений, я боюсь, таким образом, Вы не можете использовать его, чтобы сделать десятичный шаг.

я сказал бы просто что использование некоторое время цикл:

i = 0.0
while i <= 1.0:
    print i
    i += 0.1

, Если Вам любопытно, Python преобразовывает Ваши 0.1 в 0, который является, почему он говорит Вам, что аргументом не может быть нуль.

12
ответ дан Dana 9 February 2017 в 08:37
поделиться

Диапазон Python () может только сделать целые числа, не плавающую точку. В Вашем конкретном случае можно использовать понимание списка вместо этого:

[x * 0.1 for x in range(0, 10)]

(Заменяют вызов для расположения с тем выражением.)

Для более общего случая, можно хотеть записать пользовательскую функцию или генератор.

192
ответ дан 9 February 2017 в 08:37
поделиться

Увеличьте величину i для цикла и затем уменьшите его при необходимости в нем.

for i * 100 in range(0, 100, 10):
    print i / 100.0

РЕДАКТИРОВАНИЕ: Я честно не могу помнить, почему я думал, что это будет работать синтаксически

for i in range(0, 11, 1):
    print i / 10.0

, Который должен иметь желаемый вывод.

31
ответ дан cmsjr 9 February 2017 в 08:37
поделиться

И если Вы часто делаете это, Вы могли бы хотеть сохранить сгенерированный список r

r=map(lambda x: x/10.0,range(0,10))
for i in r:
    print i
5
ответ дан RSabet 9 February 2017 в 08:37
поделиться
  • 1
    @Neil: Я сомневаюсь, что это - хорошая Идея иметь дополнительный + - /* как Комплекс + Полярный, Сложный + Корзина и так далее. – Mykola Golubyev 15 March 2010 в 12:20

Вы можете использовать эту функцию:

def frange(start,end,step):
    return map(lambda x: x*step, range(int(start*1./step),int(end*1./step)))
2
ответ дан 22 November 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: