거의 유사한 동작이며 목적도 비슷하다.
numpy.arange()
Values are generated within the half-open interval [`start`, `stop`)
numpy.linspace()
Returns `num` evenly spaced samples, calculated over the interval [`start`, `stop`].
print("arange:", np.arange(start=0, stop=6, step=1))
print("linspace:", np.linspace(start=0, stop=6, num=7))
결과:
arange: [0 1 2 3 4 5]
linspace: [0. 1. 2. 3. 4. 5. 6.]
linspace의 num은 '분할점의 개수'이다. 여기엔 start와 stop 값이 포함된다. 함수명이 linear space처럼 보이는데, 입력 요소가 '분할구간 개수'가 아니라는 건 다소 직관적이지 않은 느낌이다.
그리고 linspace는 분할점 위치가 정수로 딱 떨어져도 소숫점 표기방식을 갖는다. arange()는 start/stop/step 중 하나라도 소숫점을 표기하면 생성 결과 값들도 소숫점을 가진다. 그러나 Python에선 어떤 값이 소숫점을 갖는지가 거의 의미 없다.
print("arange:", np.arange(start=0, stop=5.7, step=0.8))
print("linspace:", np.linspace(start=0, stop=5.6, num=8))
결과:
arange: [0. 0.8 1.6 2.4 3.2 4. 4.8 5.6]
linspace: [0. 0.8 1.6 2.4 3.2 4. 4.8 5.6]
arange()와 linspace()의 결과를 같게 만들려면 위처럼 stop 값이나 num 값을 잘 따져 맞춰줘야 한다. 따라서 상황에 맞게 골라 쓰는 게 답(이지만 통상 개념이 익숙한 한 가지를 주로 쓰게 된다. 실수 방지 면에선 그게 나을 수도.)
print("arange:", np.arange(start=6, stop=0, step=-1))
print("linspace:", np.linspace(start=6, stop=0, num=7))
결과:
arange: [6 5 4 3 2 1]
linspace: [6. 5. 4. 3. 2. 1. 0.]
arange()의 step을 음수로 하거나, linspace()의 start/stop를 뒤집어 입력하면 감소 방향으로 배열이 생성된다.
print("arange:", np.arange(start=1, stop=3.0, step=1)) # start, stop, step 모두 정수여야 결과도 정수
→ arange: [1. 2.]
print("arange:", np.arange(start=1, stop=2, step=0.1))
→ arange: [1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9]
print("arange:", np.arange(start=1, stop=2, step=1)) # 정수로 stop을 포함하지 않아서 1개 원소만 생성되었다.
→ arange: [1]
print("arange:", np.arange(start=1, stop=1, step=1)) # 종료 조건 stop은 시작 조건 start보다 강력하다.
→ arange: []
print("arange:", np.arange(start=1, stop=1, step=0)) # 구간 길이 0, 분할길이 0이므로 산술연산 에러
→ ZeroDivisionError: division by zero
'Work' 카테고리의 다른 글
Definitions of Defect, Error, Failure, Fault and Problem (0) | 2020.06.30 |
---|---|
BMS Software Engineer Test (0) | 2020.06.11 |
Second-life Battery (0) | 2020.04.23 |
모르고 배운 자의 최후 (0) | 2020.03.06 |
목표 요건 (0) | 2020.02.21 |