Python
Numpy.arange / Numpy.linespace
꼬꼬마코더
2024. 4. 20. 14:23
728x90
다음 numpy arange 문제를 풀어보세요.
numpy.arange([start, ]stop, [step, ]dtype=None, *, like=None)
np.arange(0, 5, 0.5, dtype=int)
- 시작 값(0): 배열의 시작 값입니다. 이 예에서는 0부터 시작합니다.
- 종료 값(5): 배열 생성이 종료되는 값으로, 이 값은 포함되지 않습니다. 즉, 5는 배열에 포함되지 않습니다.
- 간격(0.5): 배열의 각 요소 간의 간격을 지정합니다. 이 경우 0.5씩 증가합니다.
- dtype=int: 배열의 데이터 타입을 지정합니다. 여기서는 int (정수) 타입을 지정하여, 결과적으로 생성되는 배열의 요소들이 정수형으로 변환됩니다.
둘 중 정답은?
1번 array([0, 0, 1, 1, 2, 2, 3, 3, 4, 4])
2번 array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
네...바로 2번입니다. 놀랍죠?
0,
0+0.5=0.5 (float) -> 0 (int)
0+0.5+0.5=1.0(float) -> 1(int) 이렇게 0부터 0.5씩 증가하는 결과값에 소수점을 제거하여 inteager 정수형을 만드는게 아니라
0,
0+0.5=0.5(float) -> 0 (int)
0+0.5=0.5(float) -> 0 (int) 앞의 결과값마다 소수점을 제거하여 정수형을 만들고 다시 그 결과값을 base로 계산하게 됩니다.
그래서 정답은 2번입니다.
arange말고 다음과 같이 linespace를 쓸 수도 있습니다.
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
np.arange(0, 5, 0.5, dtype=float)
>>>
array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])
np.linspace(0, 5, num=10)
>>>
array([0. , 0.55555556, 1.11111111, 1.66666667, 2.22222222,
2.77777778, 3.33333333, 3.88888889, 4.44444444, 5. ])
linespace는 endpoint가 True이기 때문에 5가 포함됩니다.
np.linspace(0, 5, num=10, dtype=int)
>>>
array([0, 0, 1, 1, 2, 2, 3, 3, 4, 5])
0부터 5까지 중 10개로 나눈 후 dtype을 적용하기 때문에 결과값은 array([0,0,0,0,0,0,0,0,0,0]) 이 아닙니다.