간단히 말해, numpy.newaxis
하는 데 사용되는 차원이 증가 하여 기존 배열을 하나 더 차원 사용할 경우, 한 번 . 그러므로,
1D 배열은 2D 배열이됩니다
2D 배열은 3D 배열이됩니다
3D 배열은 4D 배열이됩니다
4D 배열은 5D 배열이됩니다
등등..
다음은 1D 어레이에서 2D 어레이로의 승격 을 나타내는 시각적 설명입니다 .
시나리오 -1 : 위의 그림과 같이 1D 배열을 행 벡터 또는 열 벡터np.newaxis
로 명시 적으로 변환 하려는 경우 유용 할 수 있습니다 .
예:
# 1D array
In [7]: arr = np.arange(4)
In [8]: arr.shape
Out[8]: (4,)
# make it as row vector by inserting an axis along first dimension
In [9]: row_vec = arr[np.newaxis, :] # arr[None, :]
In [10]: row_vec.shape
Out[10]: (1, 4)
# make it as column vector by inserting an axis along second dimension
In [11]: col_vec = arr[:, np.newaxis] # arr[:, None]
In [12]: col_vec.shape
Out[12]: (4, 1)
시나리오 -2 : 일부 어레이를 추가 하는 등 일부 작업의 일부로 numpy 브로드 캐스팅 을 사용하려는 경우
예:
다음 두 배열을 추가한다고 가정 해 봅시다.
x1 = np.array([1, 2, 3, 4, 5])
x2 = np.array([5, 4, 3])
이와 같이 추가하면 NumPy가 다음을 발생시킵니다 ValueError
.
ValueError: operands could not be broadcast together with shapes (5,) (3,)
이 상황에서 np.newaxis
NumPy가 브로드 캐스트 할 수 있도록 배열 중 하나의 차원을 늘리는 데 사용할 수 있습니다 .
In [2]: x1_new = x1[:, np.newaxis] # x1[:, None]
# now, the shape of x1_new is (5, 1)
# array([[1],
# [2],
# [3],
# [4],
# [5]])
이제 다음을 추가하십시오.
In [3]: x1_new + x2
Out[3]:
array([[ 6, 5, 4],
[ 7, 6, 5],
[ 8, 7, 6],
[ 9, 8, 7],
[10, 9, 8]])
또는 배열에 새 축을 추가 할 수도 있습니다 x2
.
In [6]: x2_new = x2[:, np.newaxis] # x2[:, None]
In [7]: x2_new # shape is (3, 1)
Out[7]:
array([[5],
[4],
[3]])
이제 다음을 추가하십시오.
In [8]: x1 + x2_new
Out[8]:
array([[ 6, 7, 8, 9, 10],
[ 5, 6, 7, 8, 9],
[ 4, 5, 6, 7, 8]])
참고 : 두 경우 모두 동일한 결과를 얻습니다 (하나는 다른 것의 전치 임).
시나리오 3 : 시나리오 1과 유사합니다. 그러나 배열을 더 높은 차원 np.newaxis
으로 승격시키기 위해 두 번 이상 사용할 수 있습니다 . 이러한 연산은 때때로 고차 배열 ( 즉, Tensor )에 필요합니다.
예:
In [124]: arr = np.arange(5*5).reshape(5,5)
In [125]: arr.shape
Out[125]: (5, 5)
# promoting 2D array to a 5D array
In [126]: arr_5D = arr[np.newaxis, ..., np.newaxis, np.newaxis] # arr[None, ..., None, None]
In [127]: arr_5D.shape
Out[127]: (1, 5, 5, 1, 1)
np.newaxis vs np.reshape 에 대한 추가 배경
newaxis
다중 축에 축을 임시로 추가 할 수있는 유사 인덱스라고도합니다.
np.newaxis
하면서 배열을 다시 슬라이싱 연산자를 사용하여 np.reshape
(그리고 이것이 크기가 일치한다고 가정 고쳐 원하는 레이아웃 어레이가 반드시 a를위한 reshape
일어날).
예
In [13]: A = np.ones((3,4,5,6))
In [14]: B = np.ones((4,6))
In [15]: (A + B[:, np.newaxis, :]).shape # B[:, None, :]
Out[15]: (3, 4, 5, 6)
위의 예에서 B
(방송 사용) 의 첫 번째 축과 두 번째 축 사이에 임시 축을 삽입했습니다 . 방송 작업이 작동 np.newaxis
하도록 누락 된 축이 여기에 채워집니다 .
일반 팁 :None
대신사용할 수도 있습니다np.newaxis
. 이것들은 실제로 같은 객체 입니다.
In [13]: np.newaxis is None
Out[13]: True
추신 : 또한이 위대한 대답을보십시오 : 치수를 추가하기위한 newaxis 대 모양
except that it changes a row vector to a column vector?
첫 번째 예는 행 벡터가 아닙니다. 이것이 MATLAB 개념입니다. 파이썬에서는 행이나 열 개념이없는 1 차원 벡터 일뿐입니다. 행 또는 열 벡터는 두 번째 예와 같이 2