numpy에서 1D 배열을 2D 배열로 변환


118

2D 배열의 열 수를 지정하여 1 차원 배열을 2 차원 배열로 변환하고 싶습니다. 다음과 같이 작동하는 것 :

> import numpy as np
> A = np.array([1,2,3,4,5,6])
> B = vec2matrix(A,ncol=2)
> B
array([[1, 2],
       [3, 4],
       [5, 6]])

numpy에 내 구성 함수 "vec2matrix"와 같은 기능이 있습니까? (2D 배열처럼 1D 배열을 인덱싱 할 수 있다는 것을 이해합니다. 그러나 이것은 제가 가지고있는 코드의 옵션이 아닙니다.이 변환을해야합니다.)

답변:


163

당신 reshape은 배열을 원합니다 .

B = np.reshape(A, (-1, 2))

여기서는 -1입력 배열의 크기에서 새 차원의 크기를 유추합니다.


44

두 가지 옵션이 있습니다.

  • 더 이상 원래 모양을 원하지 않는 경우 가장 쉬운 방법은 배열에 새 모양을 할당하는 것입니다.

    a.shape = (a.size//ncols, ncols)

    자동으로 적절한 모양을 계산하기 위해 a.size//ncolsby -1를 전환 할 수 있습니다 . 확인하지 a.shape[0]*a.shape[1]=a.size않으면 문제가 발생할 수 있습니다.

  • np.reshape함수를 사용하여 새 배열을 얻을 수 있으며 , 대부분 위에 제시된 버전과 유사합니다.

    new = np.reshape(a, (-1, ncols))

    가능 new하면 초기 배열의보기 일 뿐이며 a데이터가 공유됨을 의미합니다. 그러나 어떤 경우에는 new어레이가 대신 복사됩니다. 참고 np.reshape또한 선택적 키워드 받아들이 order는 열 주요 포트란 순서로 행 주요 C 순서로 전환 할 수 있습니다. 메서드 np.reshape의 함수 버전입니다 a.reshape.

요구 사항을 준수 할 수 없다면 a.shape[0]*a.shape[1]=a.size새 어레이를 만들어야하는 문제에 봉착합니다. np.resize기능을 사용 하고 혼합 할 수 있습니다.np.reshape 등,

>>> a =np.arange(9)
>>> np.resize(a, 10).reshape(5,2)

9

다음과 같이 시도하십시오.

B = np.reshape(A,(-1,ncols))

ncols그래도 배열의 요소 수를 나눌 수 있는지 확인해야합니다 . 키워드 를 B사용하여 숫자를 가져 오는 순서로 재생할 수도 있습니다 order.


4

유일한 목적이 1d 배열 X를 2d 배열로 변환하는 것이라면 다음을 수행하십시오.

X = np.reshape(X,(1, X.size))

0
import numpy as np
array = np.arange(8) 
print("Original array : \n", array)
array = np.arange(8).reshape(2, 4)
print("New array : \n", array)

1
코드와 함께 몇 가지 설명을 포함하는 것이 좋습니다.
Sid

지금 귀하의 답변이 이전 및 np.reshape를 사용하는 위의 다른 답변과 어떻게 다른지 설명 할 수 있습니까?
StupidWolf

0
some_array.shape = (1,)+some_array.shape

또는 새로운 것을 얻으십시오

another_array = numpy.reshape(some_array, (1,)+some_array.shape)

이렇게하면 치수가 +1이되고 가장 바깥쪽에 브래킷을 추가하는 것과 같습니다.


-1

flatten()numpy 패키지에서 사용할 수 있습니다 .

import numpy as np
a = np.array([[1, 2],
       [3, 4],
       [5, 6]])
a_flat = a.flatten()
print(f"original array: {a} \nflattened array = {a_flat}")

산출:

original array: [[1 2]
 [3 4]
 [5 6]] 
flattened array = [1 2 3 4 5 6]

AttributeError: module 'numpy' has no attribute 'flatten'
Jamie F

1
코드를 공유 할 수 있습니까? numpy 확실히 flatten메소드 가 있기 때문에 : docs.scipy.org/doc/numpy/reference/generated/…
Rafi

-2

Numpy를 사용하지 않고 1D 배열을 2D 배열로 변경합니다.

l = [i for i in range(1,21)]
part = 3
new = []
start, end = 0, part


while end <= len(l):
    temp = []
    for i in range(start, end):
        temp.append(l[i])
    new.append(temp)
    start += part
    end += part
print("new values:  ", new)


# for uneven cases
temp = []
while start < len(l):
    temp.append(l[start])
    start += 1
    new.append(temp)
print("new values for uneven cases:   ", new)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.