source

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

manysource 2022. 11. 13. 19:34

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

는 2D 어레이를 사용하여 할 수 ..reshape(-1) §:

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

보통,array[-1]마지막 요소를 의미합니다.- 1번? - 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로 제공했지만 행은 알 수 없습니다. 따라서 (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)single " " " " " 、 " " "

사용하여 를 재구성하다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 두 번째의 '제2번째의 「」dim = 5 , 3차원입니다.게으름을 Numpy를 사용할 수 있는 합니다.-1:

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

이렇게 요.shape = (5, 5, 8).

저도 마찬가지예요.

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

모양 배열 = (50, 4)을 제공합니다.

자세한 것은, http://anie.me/numpy-reshape-transpose-theano-dimshuffle/ 를 참조해 주세요.

설명:

newshape : int 또는 tuple ints

새 모양은 원래 모양과 호환되어야 합니다.정수의 경우 그 길이의 1-D 배열이 됩니다.하나의 형상 치수는 -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)

출력:

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

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

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

출력: (1차원 컬럼 배열)

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

또는

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

출력: (1차원 행 배열)

array([[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)

명령어는 매트릭스 "" 를 은 "Default the Matrix "Default operations to "Default operations" 입니다.a 1d 1d가 numpy★★★★★★★★★★★★★☆★

하지만 이렇게 코드를 사용하는 것은 좋은 생각이 아닌 것 같습니다.시도해 보는 것은 어떨까요?

b = a.reshape(1, -1)

같은 결과를 얻을 수 있어 독자가 이해하기 쉬워집니다. ★★b a ★★★★의 a몇 개의 열이 있어야 하는지(-1로 설정) 알 수 없지만(첫 번째 매개 변수를 1로 설정) 1자리 배열이 필요합니다.

변환의 최종 결과는 최종 배열의 요소 수가 초기 배열 또는 데이터 프레임의 수와 동일하다는 것입니다.

은 행 알 수 합니다.-1은 행 또는 열의 알 수 없는 개수입니다. '아주 좋다'라고 할 수 요.x( ( )x는 원래 1로 입니다. -1로 하다.

예:

를 12개의 요소로 합니다.reshape(-1,1)를 가진 배열에 대응합니다.x=12/1=12181.


를 12개의 요소로 합니다.reshape(1,-1)과 1행의 합니다.x=12/1=1220.

즉, 지정할 수 있는 행 또는 열의 수를 정확히 알지 못하고 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]]

요약하자면, 몇 가지 차원을 설정하고 NumPy가 나머지 차원을 설정하도록 합니다.

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

(userDim1, userDim1, ..., TOTAL_DIMENSION - (userDim1 + userDim2 + ...))
import numpy as np
x = np.array([[2,3,4], [5,6,7]]) 

# Convert any shape to 1D shape
x = np.reshape(x, (-1)) # Making it 1 row -> (6,)

# When you don't care about rows and just want to fix number of columns
x = np.reshape(x, (-1, 1)) # Making it 1 column -> (6, 1)
x = np.reshape(x, (-1, 2)) # Making it 2 column -> (3, 2)
x = np.reshape(x, (-1, 3)) # Making it 3 column -> (2, 3)

# When you don't care about columns and just want to fix number of rows
x = np.reshape(x, (1, -1)) # Making it 1 row -> (1, 6)
x = np.reshape(x, (2, -1)) # Making it 2 row -> (2, 3)
x = np.reshape(x, (3, -1)) # Making it 3 row -> (3, 2)

알 수 np.reshape()기사를 읽기 전까지는요

으로 을 할 수 알 수 있다reshape()네, 하지만 개편 전과 후의 데이터를 어떻게 해석해야 할까요?

내가 놓친 부분은 다음과 같다.

머신러닝 모델을 트레이닝 할 때 어레이의 중첩 레벨은 정확하게 정의되어 있습니다.

즉, 형상 변경 작업이 의미를 가지기 전에 아래의 두 가지 사항을 모두 잘 알고 있어야 합니다.

  • 조작하는 데이터(입력 재형성 방법)
  • 알고리즘/모델이 재구성된 데이터를 예상하는 방식(재구성된 출력의 모양)

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

외부 배열에는 관측치/행이 포함되어 있습니다.내부 배열에는 열/기능이 포함되어 있습니다.이로 인해 하나의 특징만 여러 개의 관측치가 배열되어 있거나 여러 특징에 대한 단일 관측치가 있는 경우 두 가지 특수한 경우가 발생합니다.

보다 고도의 예에 대해서는, stackoverflow 질문을 참조하십시오.


편집: 훨씬 더 자세한 예를 추가했습니다. 아래를 참조하십시오.

시나리오

다음의 3개의 그룹/그룹으로 구성되어 있습니다.

그림.

(그림은 1그룹을 나타내고 있습니다)

것이는 emb_size=32src emb가 된다.torch.Size([3, 32])6. 리 6, 6 tgt emb.torch.Size([6, 32])

그림 2

목표

각 src가 2tgt 노드에 대응하도록 데이터를 재구성하고 싶기 때문에 다음과 같은 작업을 수행합니다.

그림 3

이제 i번째 src 노드의 경우 다음이 있습니다.

  • source_embs[i,:]
  • 하는 「」를 해 주세요.target_embs[i,:,:]
  • 요점은 데이터가 깔끔하게 정리되어 있기 때문에 재형성하지 않으면 이 간단한 인덱싱을 수행할 수 없다는 것입니다.

세부 사항

target_embs:

  • 을 바꾸기 전에 은 '형상'입니다.[6,32]
  • 흐릿한 곳부터 합니다.dim1=32 않으니 해 주세요.
  • 는 모양을 '형상'으로 [6,*] 은, 「」 「 」 dim0=6하고 dim1을 dim1로 .[6]
  • 할 때[6][3,2] 가장 의 흐릿한 곳을 에, 이렇게 그래서 우리는2요소를 선택한 다음 행을 변경합니다.2을 수행합니다.
  • 알고 있는 처럼, 는 전전지,, ,,,,,, as,[6,*] 대응하다[src1_tgt1, src1_tgt2, src2_tgt1, src2_tgt2, src3_tgt1, src3_tgt2]이은 이 않으면 이 그렇지 않으면 입력을 이 형식으로 재배치해야 합니다.)
  • 에, 올바른 것을 알 수 있습니다.「 」 、 「 」 。[3,2], 즉 우리가 원하는 것에 할 것이다.[[src1_tgt1,src1_tgt2],[src2_tgt1, src2_tgt2],[src3_tgt1, src3_tgt2]]
  • ★★★[6,32][3,2,32]되었습니다.
  • 요?[6,32][4,3,16]가 일치하기 할 수 , 그의 목적에 않습니다.
  • 가 '이것'을 가지고 ?[32,2,3]에 가 아니라[3,2,32]reshape(input6x32,(32,2,3))우리가 할 수 은 에 도달하는 이다.[3,2,32] 그 에 먼, 음, 음, 음, 음을 사용하세요.transpose()[32,2,3].

summary(기본 사용)

  • 한 번에 2개의 연속된 치수를 재형성하고 2개의 치수만 재형성합니다.이렇게 하면 훨씬 더 이해하기 쉬워요.
  • 연속되지 않은 치수의 모양을 바꾸려면 모양을 바꾸기 전에 전치하십시오.
  • 더용법이 수 , 할 수 입니다.reshape()고고있있있있다다

-1(또는 다른 음의 정수)을 사용하는 경우, 이 테스트는 kkk로 작성되었습니다.

b = numpy.reshape(a, -1)

은 단지 '아예'를 위해서입니다.numpy.reshape벡터 크기(행 x 열)를 자동으로 계산하고 해당 치수를 가진 1-D 벡터로 재배치합니다.이 명령어는 자동으로 실행되므로 유용합니다.값을 , "1-D"를 선택합니다.reshape열x열음의 정수를 입력할 수 있으면 프로세스가 쉬워집니다.

"다른 모든 치수가 지정된 경우 이 치수가 지정되었습니다."

'이러다', '이러다', '이러다', '이러다', '이러다',-1원래 배열의 치수곱의 치수를 새로 지정된 치수의 치수곱으로 지정합니다.이 값이 정수가 아닐 경우 오류가 반환됩니다.

모양 : 모양 배열: 모양 배열의 경우(2,3,5)뭇매를 맞다

a = np.random.rand(2, 3, 5)

np.reshape(a, (-1,  2,  5))
np.reshape(a, ( 3, -1,  5))
np.reshape(a, ( 3,  2, -1))

언급URL : https://stackoverflow.com/questions/18691084/what-does-1-mean-in-numpy-reshape