[python] numpy reshape에서 -1은 무엇을 의미합니까?

numpy 행렬은 매개 변수 -1을 가진 재구성 기능을 사용하여 벡터로 재구성 될 수 있습니다. 그러나 나는 -1이 무엇을 의미하는지 모르겠습니다.

예를 들면 다음과 같습니다.

a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
b = numpy.reshape(a, -1)

결과 b는 다음과 같습니다.matrix([[1, 2, 3, 4, 5, 6, 7, 8]])

-1이 무엇을 의미하는지 아는 사람이 있습니까? 그리고 파이썬은 -1과 같은 몇 가지 의미를 할당하는 것 같습니다 : array[-1]마지막 요소를 의미합니다. 설명해 줄 수 있습니까?



답변

새로운 모양을 제공하기 위해 충족해야 할 기준은 ‘새로운 모양은 원래 모양과 호환되어야합니다’입니다.

numpy를 사용하면 새로운 모양 매개 변수 중 하나를 -1 (예 : (2, -1) 또는 (-1,3)이지만 (-1, -1)은 아님)로 지정할 수 있습니다. 그것은 단순히 그것이 알려지지 않은 차원이라는 것을 의미하며 우리는 numpy가 그것을 알아 내기를 원합니다. 그리고 numpy는 ‘배열의 길이와 남은 치수’를 보고 위에서 언급 한 기준을 충족시키는 지 확인하여 이것을 파악합니다.

이제 예제를 참조하십시오.

z = np.array([[1, 2, 3, 4],
         [5, 6, 7, 8],
         [9, 10, 11, 12]])
z.shape
(3, 4)

이제 (-1)로 재구성하려고합니다. 결과 새 모양은 (12)이고 원래 모양과 호환됩니다 (3,4)

z.reshape(-1)
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])

이제 (-1, 1)로 재구성하려고합니다. 우리는 열을 1로 제공했지만 행을 unknown으로 제공했습니다. 따라서 우리는 (12, 1)과 같은 새로운 모양을 얻습니다. 원래 모양과 다시 호환됩니다 (3,4)

z.reshape(-1,1)
array([[ 1],
   [ 2],
   [ 3],
   [ 4],
   [ 5],
   [ 6],
   [ 7],
   [ 8],
   [ 9],
   [10],
   [11],
   [12]])

위의 내용은 단일 기능 numpy에 사용 reshape(-1,1)하기위한 조언 / 오류 메시지 와 일치 합니다. 즉 단일 컬럼

array.reshape(-1, 1)데이터에 단일 기능 이있는 경우 데이터를 재구성하십시오

(-1, 2)와 같은 새로운 모양. 행을 알 수 없음, 열 2입니다. 결과는 (6, 2)

z.reshape(-1, 2)
array([[ 1,  2],
   [ 3,  4],
   [ 5,  6],
   [ 7,  8],
   [ 9, 10],
   [11, 12]])

이제 열을 알 수없는 것으로 유지하려고합니다. (1, -1)과 같은 새로운 모양. 즉, 행은 1이며 열을 알 수 없습니다. 우리는 (1, 12)

z.reshape(1,-1)
array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12]])

위의 내용은 단일 샘플 numpy에 사용 reshape(1,-1)하기위한 조언 / 오류 메시지 와 일치합니다 . 즉 단일 행

단일 샘플array.reshape(1, -1) 이 포함 된 데이터를 사용하여 데이터 재구성

새로운 모양 (2, -1). 행 2, 열을 알 수 없습니다. 우리는 (2,6)

z.reshape(2, -1)
array([[ 1,  2,  3,  4,  5,  6],
   [ 7,  8,  9, 10, 11, 12]])

(3, -1)과 같은 새로운 모양. 행 3, 열을 알 수 없습니다. 우리는 (3,4)

z.reshape(3, -1)
array([[ 1,  2,  3,  4],
   [ 5,  6,  7,  8],
   [ 9, 10, 11, 12]])

마지막으로, 두 차원을 알 수없는 차원, 즉 (-1, -1)과 같은 새로운 모양으로 제공하려고하면. 오류가 발생합니다

z.reshape(-1, -1)
ValueError: can only specify one unknown dimension


답변

배열을 재구성하는 데 사용됩니다.

크기가 2 x 10 x 10 인 3 차원 배열이 있다고 가정합니다.

r = numpy.random.rand(2, 10, 10) 

이제 5 X 5 x 8로 재구성하고 싶습니다.

numpy.reshape(r, shape=(5, 5, 8)) 

일을 할 것입니다.

첫 번째 dim = 5 및 두 번째 dim = 5를 수정하면 3 차원을 결정할 필요가 없습니다. 게으름을 돕기 위해 python은 -1 옵션을 제공합니다.

numpy.reshape(r, shape=(5, 5, -1)) 

모양 = (5, 5, 8)의 배열을 제공합니다.

마찬가지로,

numpy.reshape(r, shape=(50, -1)) 

당신에게 모양의 배열을 줄 것입니다 = (50, 4)

http://anie.me/numpy-reshape-transpose-theano-dimshuffle/ 에서 자세한 내용을 읽을 수 있습니다.


답변

에 따르면 the documentation:

newshape : 정수 또는 튜플 정수

새로운 모양은 원래 모양과 호환되어야합니다. 정수이면 결과는 해당 길이의 1 차원 배열이됩니다. 하나의 모양 차원은 -1 일 수 있습니다 . 이 경우 값은 배열의 길이와 나머지 치수에서 추론됩니다.


답변

numpy.reshape (a, newshape, order {}) 자세한 내용은 아래 링크를 확인하십시오.
https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html

아래 예제에서 출력은 결과 벡터가 단일 행이라고 설명합니다. (-1)은 1이되는 행 수를 나타냅니다.

a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
b = numpy.reshape(a, -1)

산출:

행렬 ([[1, 2, 3, 4, 5, 6, 7, 8]])

다른 예를 통해보다 정확하게 설명 할 수 있습니다.

b = np.arange(10).reshape((-1,1))

출력 : (1 차원 주상 배열입니다)

배열 ([[0],

   [1],
   [2],
   [3],
   [4],
   [5],
   [6],
   [7],
   [8],
   [9]])

b = np.arange (10). 재 형성 ((1, -1))

출력 : (1 차원 행 배열입니다)

배열 ([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])


답변

이해하기 매우 쉽습니다. “-1″은 다른 차원에서 유추 할 수있는 “알 수없는 차원”을 나타냅니다. 이 경우 행렬을 다음과 같이 설정하면

a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])

다음과 같이 행렬을 수정하십시오.

b = numpy.reshape(a, -1)

행렬 a에 대한 deafult 연산을 호출하여 1-d numpy array / martrix를 반환합니다.

그러나 이와 같은 코드를 사용하는 것은 좋은 생각이 아닙니다. 시도해 보지 않겠습니까?

b = a.reshape(1,-1)

동일한 결과를 얻을 수 있으며 독자가 이해하기가 더 명확합니다. b를 다른 모양으로 설정하십시오. a의 경우 열의 수는 없지만 (-1로 설정) 1 차원 배열 (첫 번째 매개 변수를 1로 설정)을 원합니다.


답변

간단히 말해 : 일부 치수를 설정하고 NumPy가 나머지를 설정하게합니다.

(userDim1, userDim2, ..., -1) -->>

(userDim1, userDim1, ..., TOTAL_DIMENSION - (userDim1 + userDim2 + ...))


답변

그것은 당신이 줄 수있는 행이나 열 수에 대해 확신하지 못하고 numpy에게 재구성 할 열 또는 행 수를 제안하도록 요청한다는 것을 의미합니다.

numpy는 -1 https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html에 대한 마지막 예를 제공합니다.

(-1)에 대해 더 잘 이해하려면 아래 코드와 출력을 확인하십시오.

암호:-

import numpy
a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
print("Without reshaping  -> ")
print(a)
b = numpy.reshape(a, -1)
print("HERE We don't know about what number we should give to row/col")
print("Reshaping as (a,-1)")
print(b)
c = numpy.reshape(a, (-1,2))
print("HERE We just know about number of columns")
print("Reshaping as (a,(-1,2))")
print(c)
d = numpy.reshape(a, (2,-1))
print("HERE We just know about number of rows")
print("Reshaping as (a,(2,-1))")
print(d)

출력 :-

Without reshaping  ->
[[1 2 3 4]
 [5 6 7 8]]
HERE We don't know about what number we should give to row/col
Reshaping as (a,-1)
[[1 2 3 4 5 6 7 8]]
HERE We just know about number of columns
Reshaping as (a,(-1,2))
[[1 2]
 [3 4]
 [5 6]
 [7 8]]
HERE We just know about number of rows
Reshaping as (a,(2,-1))
[[1 2 3 4]
 [5 6 7 8]]