본문 바로가기

개발하자

Python 배열/행렬 치수

반응형

Python 배열/행렬 치수

나는 두 개의 행렬을 만든다

import numpy as np
arrA = np.zeros((9000,3))
arrB = np.zerros((9000,6))

나는 그 행렬들의 조각들을 연결하고 싶다. 하지만 내가 하려고 하면:

arrC = np.hstack((arrA, arrB[:,1]))

오류가 발생합니다:

ValueError: all the input arrays must have same number of dimensions

대신 평등하기 때문인 것 같은데 어떻게 해결해야 할지 모르겠어요.

이 문제에 대해 의견을 말씀해 주시겠습니까?




나는 다음과 같은 것을 시도할 것이다:

np.vstack((arrA.transpose(), arrB[:,1])).transpose()



인덱스가 아닌 인덱스 목록을 전달하여 치수를 보존할 수 있습니다:

>>> arrB[:,1].shape
(9000,)
>>> arrB[:,[1]].shape
(9000, 1)
>>> out = np.hstack([arrA, arrB[:,[1]]])
>>> out.shape
(9000, 4)



배열에서 선택하는 몇 가지 방법은 다음과 같습니다:

np.hstack((arrA,arrB[:,[1]]))
np.hstack((arrA,arrB[:,1][:,None]))
np.hstack((arrA,arrB[:,1].reshape(9000,1)))
np.hstack((arrA,arrB[:,1].reshape(-1,1)))

하나는 배열이나 목록과 함께 색인화하는 개념을 사용하고, 다음은 새로운 축을 추가한다(예: 세 번째는 를 사용한다). 이것들은 모두 기본적인 얼빠진 배열 조작 작업이다.




이것은 시각적으로 보기가 더 쉽습니다.

가정:

>>> arrA=np.arange(9000*3).reshape(9000,3)
>>> arrA
array([[    0,     1,     2],
       [    3,     4,     5],
       [    6,     7,     8],
       ..., 
       [26991, 26992, 26993],
       [26994, 26995, 26996],
       [26997, 26998, 26999]])
>>> arrB=np.arange(9000*6).reshape(9000,6)
>>> arrB
array([[    0,     1,     2,     3,     4,     5],
       [    6,     7,     8,     9,    10,    11],
       [   12,    13,    14,    15,    16,    17],
       ..., 
       [53982, 53983, 53984, 53985, 53986, 53987],
       [53988, 53989, 53990, 53991, 53992, 53993],
       [53994, 53995, 53996, 53997, 53998, 53999]])

ArrB의 한 조각을 취하면 행과 더 유사한 시리즈를 생성하는 것입니다:

>>> arrB[:,1]
array([    1,     7,    13, ..., 53983, 53989, 53995])

arA에 추가할 열과 같은 모양의 열이 필요합니다:

>>> arrB[:,[1]]
array([[    1],
       [    7],
       [   13],
       ..., 
       [53983],
       [53989],
       [53995]])

그러면 hstack이 예상대로 작동합니다:

>>> arrC=np.hstack((arrA, arrB[:,[1]]))
>>> arrC
array([[    0,     1,     2,     1],
       [    3,     4,     5,     7],
       [    6,     7,     8,    13],
       ..., 
       [26991, 26992, 26993, 53983],
       [26994, 26995, 26996, 53989],
       [26997, 26998, 26999, 53995]])

대체 형식은 한 차원에서 -1을 지정하고 다른 차원에서 원하는 행 또는 콜 수를 지정하는 것입니다:

>>> arrB[:,1].reshape(-1,1)  # one col
array([[    1],
       [    7],
       [   13],
       ..., 
       [53983],
       [53989],
       [53995]])
>>> arrB[:,1].reshape(-1,6)   # 6 cols
array([[    1,     7,    13,    19,    25,    31],
       [   37,    43,    49,    55,    61,    67],
       [   73,    79,    85,    91,    97,   103],
       ..., 
       [53893, 53899, 53905, 53911, 53917, 53923],
       [53929, 53935, 53941, 53947, 53953, 53959],
       [53965, 53971, 53977, 53983, 53989, 53995]])
>>> arrB[:,1].reshape(2,-1)  # 2 rows
array([[    1,     7,    13, ..., 26983, 26989, 26995],
       [27001, 27007, 27013, ..., 53983, 53989, 53995]])

어레이 쉐이핑 및 스태킹에 대한 자세한 정보


반응형