[python] 10 진수 range () 단계 값을 사용하는 방법?

0과 1 사이에서 0.1 씩 단계를 밟는 방법이 있습니까?

나는 다음과 같이 할 수 있다고 생각했지만 실패했습니다.

for i in range(0, 1, 0.1):
    print i

대신, 단계 인수는 0이 될 수 없으며 내가 기대하지 않았다고 말합니다.



답변

소수 단계를 직접 사용하는 대신 원하는 점 수로 표현하는 것이 훨씬 안전합니다. 그렇지 않으면 부동 소수점 반올림 오류로 인해 잘못된 결과가 발생할 수 있습니다.

NumPy 라이브러리 에서 linspace 함수를 사용할 수 있습니다 (표준 라이브러리의 일부는 아니지만 비교적 쉽게 구할 수 있습니다). 리턴하는 데 여러 포인트가 필요하며 올바른 엔드 포인트 포함 여부를 지정할 수도 있습니다.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])

그러나 부동 소수점 반올림 오류 문제 일으킬 수 있습니다. 반올림 오류로 인해 arange3 개의 숫자 만 생성해야 할 때 길이 4 배열을 생성 하는 간단한 경우가 있습니다.

>>> numpy.arange(1, 1.3, 0.1)
array([1. , 1.1, 1.2, 1.3])


답변

파이썬의 range ()는 부동 소수점이 아닌 정수 만 할 수 있습니다. 특정한 경우에 대신 목록 이해를 사용할 수 있습니다.

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

해당 식으로 범위를 바꾸려면 통화를 대체하십시오.

보다 일반적인 경우에는 사용자 정의 함수 또는 생성기를 작성하는 것이 좋습니다.


답변

바탕 ‘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']
>>> 


답변

i루프 의 크기를 늘린 다음 필요할 때 줄입니다.

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

편집 : 나는 그것이 구문 적으로 작동 할 것이라고 생각한 이유를 솔직히 기억할 수 없다

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

원하는 출력이 있어야합니다.


답변

scipyfloat 처리 요구 사항을 충족시키기 위해 arangePython의 range()생성자를 일반화 하는 내장 함수 가 있습니다.

from scipy import arange


답변

NumPy는 약간 과잉이라고 생각합니다.

[p/10 for p in range(0, 10)]
[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]

일반적으로 스텝 부산물 할 말하기 1/x까지를 y당신이 할 것

x=100
y=2
[p/x for p in range(0, int(x*y))]
[0.0, 0.01, 0.02, 0.03, ..., 1.97, 1.98, 1.99]

( 1/x테스트 할 때 덜 반올림 소음이 발생했습니다).


답변

R의 seq 함수 와 유사하게 , 올바른 스텝 값이 주어지면 순서대로 순서를 반환합니다. 마지막 값은 정지 값과 같습니다.

def seq(start, stop, step=1):
    n = int(round((stop - start)/float(step)))
    if n > 1:
        return([start + step*i for i in range(n+1)])
    elif n == 1:
        return([start])
    else:
        return([])

결과

seq(1, 5, 0.5)

[1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0]

seq(10, 0, -1)

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

seq(10, 0, -2)

[10, 8, 6, 4, 2, 0]

seq(1, 1)

[ 1 ]