균일한 간격의 숫자 배열을 만드는 방법

이 튜토리얼에서는 NumPy linspace()를 사용하여 Python에서 균일한 간격의 숫자 배열을 만드는 방법을 알려줍니다.

NumPy linspace()의 구문을 배우고 사용 방법을 이해하는 데 도움이 되는 예제가 이어집니다.

참고: 이 자습서를 따르려면 Python과 NumPy가 설치되어 있어야 합니다.

아직 Numpy가 없으신가요? 빠른 설치 가이드를 준비했습니다.

시작하자!

Numpy 설치 및 가져오기

튜토리얼을 시작하기 전에 NumPy 라이브러리를 설치하는 단계를 빠르게 실행해 보겠습니다.

⏩ 이미 NumPy가 설치되어 있다면 다음 섹션으로 건너뛰어도 됩니다.

  • 클라우드 기반 Jupyter 노트북 환경인 Google Colab을 사용하는 경우 NumPy를 가져와서 바로 코딩을 시작할 수 있습니다. (이 튜토리얼에 권장됨 ✅)
  • 로컬 작업 환경을 설정하려면 Python의 Anaconda 배포판을 설치하는 것이 좋습니다. Anaconda에는 몇 가지 유용한 패키지가 사전 설치된 상태로 제공됩니다. 운영 체제에 맞는 설치 프로그램을 다운로드할 수 있습니다. 설정 과정은 몇 분 밖에 걸리지 않습니다.⌛
  • 컴퓨터에 Python이 이미 설치되어 있는 경우에도 Anaconda 배포판을 설치할 수 있습니다. conda 또는 pip를 사용하여 패키지를 설치하고 관리할 수 있습니다. Anaconda 명령 프롬프트에서 다음 명령 중 하나를 실행하여 NumPy를 설치할 수 있습니다.
# Install NumPy using conda
conda install numpy

# Install NumPy using pip
pip install numpy

다음 단계로 다음 명령을 실행하여 별칭 np로 numpy를 가져옵니다. 이렇게 하면 모듈의 항목에 액세스할 때마다 numpy를 입력할 필요 없이 NumPy를 np로 참조하는 데 도움이 됩니다.

import numpy as np

앞으로 np.과 같이 NumPy 라이브러리의 모든 함수에 액세스하기 위해 점 표기법을 사용할 것입니다.

균일한 간격의 숫자의 경우

NumPy 배열로 작업할 때 간격에 균일한 간격의 숫자 배열을 만들어야 할 때가 있습니다.

더 진행하기 전에 또 다른 유사한 np.arange() 함수를 빠르게 살펴보겠습니다.

NumPy linspace() 대 NumPy arange()

이전에 NumPy를 사용한 적이 있다면 np.arange()를 사용하여 지정된 범위 내에서 숫자 배열을 생성했을 것입니다.

np.arange(start, stop, step)는 start부터 stop까지의 숫자 배열을 단계적으로 반환한다는 것을 알고 있습니다. 기본 단계 크기는 1입니다.

그러나 단계의 값이 항상 명확하지 않을 수 있습니다. 이것이 왜 그런지 봅시다.

예를 들어, 0과 1 사이에 균일한 간격의 숫자 4개가 필요한 경우 단계 크기가 0.25여야 한다는 것을 알고 있습니다. 그러나 np.arange()를 사용하는 경우 중지 값 1을 포함하지 않습니다. 따라서 중지 값을 초과하는 간격을 선택해야 합니다.

다음 이미지는 간격에 일정한 수의 균일한 간격이 필요한 몇 가지 추가 예를 보여줍니다. [a, b].

간격에서 균일한 간격의 점

4개의 균등한 간격의 점에 대한 첫 번째 예 [0,1] 충분히 쉬웠다. 점 사이의 계단 크기는 0.25이어야 한다는 것을 알고 있습니다.

1에서 33 사이의 균등한 간격으로 7개의 점을 나열해야 하는 약간 더 복잡한 예가 있다고 가정합니다. 여기에서 단계 크기가 즉시 명확하지 않을 수 있습니다. 그러나 이 경우 단계 값을 수동으로 계산할 수 있습니다.

그러나 np.linspace()는 더 간단하게 만들기 위해 여기에 있습니다! 😄

NumPy linspace 사용

np.linspace()를 사용할 때 단계 크기에 대해 걱정할 필요 없이 간격의 포인트 수만 지정하면 됩니다. 원하는대로 배열을 다시 얻을 수 있습니다.

이러한 동기를 가지고 다음 섹션에서 NumPy linspace() 구문을 배우도록 하겠습니다.

NumPy linspace() 구문

NumPy linspace() 사용 구문은 다음과 같습니다.

np.linspace(start, stop, num, endpoint, retstep, dtype, axis)

처음에는 위의 구문이 많은 매개변수로 인해 매우 복잡해 보일 수 있습니다.

그러나 대부분은 선택적 매개변수이며 몇 분 안에 훨씬 더 간단한 구문에 도달할 것입니다.

이제 위의 구문을 구문 분석하여 시작하겠습니다.

  • 시작 및 중지는 각각 간격의 시작 및 끝 지점입니다. 시작 및 중지는 모두 스칼라 또는 배열일 수 있습니다. 이 자습서에서는 스칼라 시작 및 끝 값으로 제한합니다.
  • num은 균일한 간격의 점 수입니다. 그리고 기본값이 50인 선택적 매개변수입니다.
  • endpoint는 또한 True 또는 False일 수 있는 선택적 매개변수입니다.
  • 기본값은 True이며 기본적으로 끝점이 간격에 포함됨을 의미합니다. 그러나 False로 설정하여 끝점을 제외할 수 있습니다.
  • retstep은 부울 True 또는 False를 취하는 또 다른 선택적 매개변수입니다. True로 설정하면 단계 값이 반환됩니다.
  • dtype은 배열에 있는 숫자의 데이터 유형입니다. 유형은 일반적으로 float로 유추되며 명시적으로 제공할 필요가 없습니다.
  • axis는 숫자가 저장되어야 하는 축을 나타내는 또 다른 선택적 매개변수입니다. 그리고 이것은 시작 및 중지 값이 배열 자체인 경우에만 관련이 있습니다.

▶️ np.linspace()는 무엇을 반환합니까?

균일한 간격의 숫자로 구성된 N차원 배열을 반환합니다. 그리고 retstep 매개변수가 True로 설정되면 단계 크기도 반환합니다.

지금까지의 논의를 바탕으로 다음은 np.linspace()를 사용하는 단순화된 구문입니다.

np.linspace(start, stop, num)

위의 코드 줄은 간격에 균등한 간격의 숫자 배열을 반환합니다. [start, stop].

이제 구문을 알았으므로 예제 코딩을 시작하겠습니다.

NumPy linspace()로 균일한 간격의 배열을 만드는 방법

#1. 첫 번째 예에서 간격에 균일한 간격의 숫자 20개로 구성된 배열을 만들어 보겠습니다. [1, 5].

start, stop 및 num 값을 키워드 인수로 지정할 수 있습니다. 이는 아래 코드 셀에 표시됩니다.

import numpy as np
arr1 = np.linspace(start = 1,stop = 5,num = 20)
print(arr1)

# Output:
[1.         1.21052632 1.42105263 1.63157895 1.84210526 2.05263158
 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947
 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737
 4.78947368 5.        ]

두 끝점을 모두 포함하여 배열의 숫자가 1에서 시작하고 5에서 끝나는 방식에 주목하십시오. 또한 점 1과 5를 포함한 숫자가 반환된 배열에서 부동 소수점으로 표현되는 방식을 관찰합니다.

#2. 이전 예에서 start, stop 및 num에 대한 값을 키워드 인수로 전달했습니다. 올바른 순서로 인수를 전달하면 아래와 같이 값만 있는 위치 인수로 사용할 수도 있습니다.

import numpy as np
arr2 = np.linspace(1,5,20)
print(arr2)

# Output:
[1.         1.21052632 1.42105263 1.63157895 1.84210526 2.05263158
 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947
 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737
 4.78947368 5.        ]

#삼. 이제 retstep을 True로 설정한 또 다른 배열을 만들어 보겠습니다.

이것은 함수가 이제 배열과 단계를 모두 반환한다는 것을 의미합니다. 그리고 우리는 그것들을 두 개의 변수 arr3: 배열과 step_size: 반환된 단계 크기로 압축을 풀 수 있습니다.

다음 코드 셀은 이를 수행하는 방법을 설명합니다.

import numpy as np
arr3, step_size = np.linspace(1,5,20,retstep = True)
print(arr3)

# Output:
[1.         1.21052632 1.42105263 1.63157895 1.84210526 2.05263158
 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947
 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737
 4.78947368 5.        ]

# Output:
print(step_size)
0.21052631578947367

#4. 마지막으로 endpoint를 False로 설정하고 어떤 일이 일어나는지 확인해보자.

import numpy as np
arr4 = np.linspace(1,5,20,endpoint = False)
print(arr4)

# Output:
[1.  1.2 1.4 1.6 1.8 2.  2.2 2.4 2.6 2.8 3.  3.2 3.4 3.6 3.8 
4.  4.2 4.4 4.6 4.8]

반환된 배열에서 1이 포함된 반면 5는 포함되지 않은 것을 볼 수 있습니다. 배열의 마지막 값은 4.8이지만 여전히 20개의 숫자가 있습니다.

지금까지는 균일한 간격의 숫자 배열만 생성했습니다. 다음 섹션에서는 이러한 숫자를 표시하여 시각화해 보겠습니다.

일정한 간격의 숫자를 표시하는 방법

이 섹션에서는 [10,15] 관심의 간격으로. 그런 다음 np.linspace()를 사용하여 각각 8점과 12점을 가진 두 개의 배열을 생성합니다.

이 작업이 완료되면 matplotlib 라이브러리의 플로팅 기능을 사용하여 플로팅할 수 있습니다.

명확성을 위해 N1 = 8 및 N2 = 12의 두 배열을 y축을 따라 서로 다른 위치에서 균등하게 간격을 둔 점으로 고정합니다.

다음 코드 스니펫은 이를 보여줍니다.

import numpy as np
import matplotlib.pyplot as plt

N1 = 8
N2 = 12

a = 10
b = 15

y1 = np.zeros(N1)
y2 = np.zeros(N2)

x1 = np.linspace(a, b, N1)
x2 = np.linspace(a, b, N2)

plt.plot(x1, y1-0.5, 'o')
plt.plot(x2, y2 + 0.5, 'o')

plt.ylim([-1, 1])

plt.title(f'Evenly Spaced Numbers in the Interval [{a},{b}]')
plt.xlabel('Interval')

plt.show()

균일한 간격의 점을 생성하면 수학 함수로 작업할 때 도움이 될 수 있습니다. 다음 섹션에서 이에 대해 알아보겠습니다.

수학 함수와 함께 NumPy linspace()를 사용하는 방법

np.linspace()를 사용하여 균일한 간격의 숫자 배열을 생성한 후 간격에서 수학 함수의 값을 계산할 수 있습니다.

아래 코드 셀에서 먼저 간격 0에서 2π 사이에 균등한 간격으로 50개의 점을 생성합니다. 그런 다음 배열 x에 np.sin()을 사용하여 배열 y를 만듭니다. 기본값은 50이므로 num 매개변수를 건너뛸 수 있습니다. 계속해서 명시적으로 사용하겠습니다.

다음 단계로 구간에서 사인 함수를 플롯할 수 있습니다. [0, 2π]. 이렇게 하려면 다음을 사용할 수 있습니다. 매트플롯립, 이전 예에서와 같이. 특히 matplotlib.pytplot의 plot() 함수는 선 플롯을 만드는 데 사용됩니다.

import numpy as np
import matplotlib.pyplot as plt

N = 50

a = 0.0
b = 2*np.pi

x = np.linspace(a, b, N)
y = np.sin(x)

plt.plot(x, y, marker = "o")

plt.ylim([-1, 1])
plt.title(f'y = sin(x)')
plt.xlabel('x ---->')

plt.show()

이제 N을 10으로 설정하여 위의 코드를 실행합니다. 아래 그림과 같은 플롯을 얻을 수 있습니다.

그리고 구간에서 10개만 선택했기 때문에 플롯이 그다지 매끄럽지 않다는 것을 알 수 있습니다.

일반적으로 고려하는 점의 수가 많을수록 함수의 플롯이 더 부드러워집니다.

결론

다음은 우리가 배운 내용을 요약한 것입니다.

  • np.linspace(start, stop, num)은 간격에서 균등한 간격의 숫자 배열을 반환합니다. [start, stop].
  • 중지를 제외하려면 선택적 매개변수 끝점을 False로 설정하고 간격을[시작중지)로설정합니다[startstop)
  • 단계 크기를 얻으려면 선택적으로 retstep을 True로 설정하십시오.
  • np.linspace()를 사용하여 균일한 간격의 배열을 생성한 다음 수학 함수와 함께 배열을 사용합니다.

이제 np.linspace()가 어떻게 작동하는지 이해하셨기를 바랍니다. Jupyter 노트북에서 위의 예를 실행하도록 선택할 수 있습니다. Jupyter 노트북 또는 고려할 수 있는 다른 Jupyter 대안에 대한 가이드를 확인하세요.

곧 다른 Python 튜토리얼에서 뵙겠습니다. 그때까지 계속 코딩하세요!😀