반응형
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]])
어레이 쉐이핑 및 스태킹에 대한 자세한 정보
반응형
'개발하자' 카테고리의 다른 글
Kubernetes 네임스페이스가 비어 있는 경우에만 삭제하시겠습니까? (0) | 2023.01.17 |
---|---|
Python Transparent KivyMD Navigation Drawer (0) | 2023.01.17 |
파이썬의 매트릭스 기본 도움말 (1) | 2023.01.16 |
sort values and return list of keys from dict python (0) | 2023.01.15 |
MongoDB와 관련된 FastAPI 문제 - TypeError: 'ObjectId' 개체를 인식할 수 없습니다. (0) | 2023.01.15 |