Axis Argument를 사용하여 Python에서 NumPy 배열 조작

Salman Mehmood 2023년6월20일
Axis Argument를 사용하여 Python에서 NumPy 배열 조작

이 기사에서는 NumPy 인수로 작업하는 방법과 NumPy에서 축이 무엇인지 확인하는 방법을 설명합니다. 또한 Python에서 NumPy 배열을 빠르게 조작하기 위한 강력한 작업으로 axis 인수를 사용하는 방법을 배웁니다.

axis 인수를 사용하여 Python에서 NumPy 배열 조작

시연하려면 작업할 데이터가 필요하지만 너무 크고 복잡한 것은 원하지 않습니다. 그것이 우리가 매우 자주 하는 일을 한 이유입니다. NumPy에 대해 배울 때 가장 먼저 떠오르는 것은 배열이라고 합니다. 이 경우에는 이미 배열을 테스트하기 위해 만들었습니다.

import numpy as np

Temperature_Array = np.array(
    [
        [[26, 25, 24], [24, 25, 26]],
        [[27, 25, 23], [25, 28, 24]],
        [[27, 24, 26], [24, 27, 25]],
        [[27, 26, 24], [28, 25, 26]],
    ]
)

Timeseries_Temperature = np.array(
    [[23, 24, 25, 24, 23, 25], [25, 26, 27, 29, 25, 23], [20, 23, 21, 22, 25, 29]]
)

첫 번째 테스트 배열인 Temperature_Array는 그리드 예보를 나타내야 합니다. 그리드 관측이 있고 2행 3열로 배열된 6개의 스테이션으로 4단계 단계를 에뮬레이트하려고 한다고 가정해 보겠습니다.

다음 하위 배열은 첫 번째 시간 단계 등이 됩니다.

[[26, 25, 24], [24, 25, 26]]

이러한 각 축에 대해 다른 수의 요소를 만들었으며 각 행에 4개의 시간 단계와 3개의 열 또는 3개의 스테이션이 있고 시간 단계당 2개의 행이 있음을 알 수 있습니다.

NumPy로 무언가를 시도할 때 흔히 범하는 실수는 3x3 배열 또는 3x3x3 배열을 만드는 것이며, 무슨 일이 일어나는지 알고 있다고 생각하지만 실제 세계에서 시도하면 작동하지 않습니다.

이는 실제 데이터가 서로 다른 방향으로 서로 다른 수의 요소를 가지고 있고 슬라이스나 수행하려는 작업이 없기 때문입니다.

두 번째 Timeseries_Temperature는 더 간단합니다. 1시간마다 온도를 관찰하고 6시간을 갖는 세 개의 관측소를 나타냅니다.

행은 스테이션이고 열은 시간입니다.

5차원 배열이 있는 경우 행, 열 및 깊이가 시간일 수 있지만 이러한 차원은 배열의 축입니다. 축은 이 NumPy 배열의 개별 부분일 뿐입니다. 통과하는 방향입니다.

배열의 차원 수인 ndim 특성을 사용하여 차원을 가져오기 위해 Timeseries_Temperature를 살펴보겠습니다.

Timeseries_Temperature.ndim

출력:

2

최소값에 대한 정보를 얻고 싶다고 가정해 보겠습니다. 그런 다음 우리는 다음과 같이 할 것입니다.

Timeseries_Temperature.min()

그리고 우리는 20이 실제로 이 배열에서 가장 낮은 값이기 때문에 20을 다시 얻습니다. 하지만 그것은 아마도 우리가 원하는 것이 아닐 것입니다. 우리는 데이터에서 언제든지 가장 낮은 온도를 경험한 스테이션을 알고 싶고 각 스테이션이 경험한 가장 낮은 온도를 알고 싶을 수도 있습니다.

또는 각 시간의 최소 온도와 6시간 동안 지정된 시간에 가장 추웠던 곳을 알고 싶을 수도 있습니다. 여기에서 axis 인수가 들어올 수 있고 우리에게 많은 도움이 될 수 있습니다.

루핑을 할 필요가 없고 수동 슬라이싱을 할 필요가 없습니다.

그러나 그것을 이해하기 위해 여기에서 몇 가지 조각을 만들어 봅시다.

Timeseries_Temperature[0, :]

우리는 0번째 차원의 0번째 요소 또는 첫 번째 행을 제공하는 0번째 축을 얻을 것입니다.

array([23, 24, 25, 24, 23, 25])

모든 것을 제공한다고 말하면 어떤 일이 발생하는지 살펴보겠습니다. 콜론은 0번째 축을 따라 표시되고 1번째 축을 따라 0번째 항목을 제공합니다.

Timeseries_Temperature[:, 0]

이것은 우리에게 0 번째 열과 모든 행을 제공합니다.

array([23, 25, 20])

이제 Timeseries_Temperature로 다시 작업하고 min() 함수를 호출합니다. shift + 을 누르면 axis 인수가 있으며 기본적으로 None입니다.

이제 axis = 0을 전달할 것입니다.

Timeseries_Temperature.min(axis=0)

이것은 배열의 최소값을 제공하지만 개별 요소를 제공합니다.

array([20, 23, 21, 22, 23, 23])

우리는 두 경우 모두 모양이 같았지만 슬라이스를 사용하는 대신 인수를 사용했습니다. 이는 매시간 스테이션의 열별 최소 온도입니다.

이제 열로 표시되는 축 1을 축소하고 각각의 최소 시간을 얻습니다.

Timeseries_Temperature.min(axis=1)

출력:

array([23, 23, 20])

이제 더 복잡한 경우를 살펴보겠습니다. Temperature_Array를 다시 인쇄하여 어떻게 보이는지 보여드리겠습니다.

Temperature_Array

출력:

array([[[26, 25, 24],
        [24, 25, 26]],

       [[27, 25, 23],
        [25, 28, 24]],

       [[27, 24, 26],
        [24, 27, 25]],

       [[27, 26, 24],
        [28, 25, 26]]])

Temperature_Array에는 3차원 행, 열 및 깊이가 있습니다. Temperature_Array[0,:,:]를 입력하면 첫 번째 블록, 이 경우 시간 단계를 나타내는 0번째 축을 얻습니다. 각 대괄호는 효과적으로 축입니다.

array([[26, 25, 24],
       [24, 25, 26]])

이번에는 minimum을 사용하는 대신 mean() 함수를 사용하여 Temperature_Array의 일부 수단을 사용합니다.

Temperature_Array.mean()

출력:

25.458333333333332

이제 0과 같은 축을 사용할 것입니다. 즉, 시간 단계의 가장 바깥쪽 대괄호 세트인 0번째 축을 접을 것입니다.

Temperature_Array.mean(axis=0)

Temperature_Array에서 시간 단계의 전체 평균인 2행 및 3열 배열을 얻었습니다.

array([[26.75, 25.  , 24.25],
       [25.25, 26.25, 25.25]])

데이터가 다르게 배열된 경우 다른 축을 사용해야 할 수도 있습니다. 우리의 경우 을 1로 사용합니다.

Temperature_Array.mean(axis=1)

여기서 우리는 열의 모든 시간 단계에서 평균을 얻는 이유인 행 번호를 축소합니다.

array([[25. , 25. , 25. ],
       [26. , 26.5, 23.5],
       [25.5, 25.5, 25.5],
       [27.5, 25.5, 25. ]])

이제 axis 인수에 2를 전달하고 axis = 2를 사용하여 열로 표시되는 가장 안쪽 차원을 축소합니다. 각 시간 단계에서 행 방향 평균 또는 4x2 배열입니다.

Temperature_Array.mean(axis=2)

출력:

array([[25.        , 25.        ],
       [25.        , 25.66666667],
       [25.66666667, 25.33333333],
       [25.66666667, 26.33333333]])

전체 코드:

# In[1]:

import numpy as np

Temperature_Array = np.array(
    [
        [[26, 25, 24], [24, 25, 26]],
        [[27, 25, 23], [25, 28, 24]],
        [[27, 24, 26], [24, 27, 25]],
        [[27, 26, 24], [28, 25, 26]],
    ]
)

Timeseries_Temperature = np.array(
    [[23, 24, 25, 24, 23, 25], [25, 26, 27, 29, 25, 23], [20, 23, 21, 22, 25, 29]]
)


# In[2]:

Timeseries_Temperature.ndim

# In[3]:

Timeseries_Temperature.min()

# In[4]:

Timeseries_Temperature[0, :]

# In[5]:

Timeseries_Temperature[:, 0]

# In[6]:

Timeseries_Temperature.min(axis=0)

# In[7]:

Timeseries_Temperature.min(axis=1)

# In[8]:

Temperature_Array

# In[9]:

Temperature_Array.ndim

# In[10]:

Temperature_Array[0, :, :]

# In[11]:

Temperature_Array.mean()

# In[12]:

Temperature_Array.mean(axis=0)

# In[13]:

Temperature_Array.mean(axis=1)

# In[14]:

Temperature_Array.mean(axis=2)
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn