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])
그러나 부동 소수점 반올림 오류 는 문제 를 일으킬 수 있습니다. 반올림 오류로 인해 arange
3 개의 숫자 만 생성해야 할 때 길이 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
원하는 출력이 있어야합니다.
답변
scipy
float 처리 요구 사항을 충족시키기 위해 arange
Python의 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 ]