numpy 배열의 일부 치수만 평탄하게 만드는 방법
Numpy 배열의 첫 번째 치수 중 일부만 "서브 플랫"하거나 평탄하게 만드는 빠른 방법이 있습니까?
예를 들어, 차원의 numpy 배열이 주어진 경우(50,100,25)
, 결과 치수는 다음과 같습니다.(5000,25)
numpy.reshape를 보세요.
>>> arr = numpy.zeros((50,100,25))
>>> arr.shape
# (50, 100, 25)
>>> new_arr = arr.reshape(5000,25)
>>> new_arr.shape
# (5000, 25)
# One shape dimension can be -1.
# In this case, the value is inferred from
# the length of the array and remaining dimensions.
>>> another_arr = arr.reshape(-1, arr.shape[-1])
>>> another_arr.shape
# (5000, 25)
Alexander의 답변 -np.reshape에 대한 약간의 일반화에서는 -1을 인수로 사용할 수 있습니다.즉, "전체 어레이 크기를 다른 모든 치수의 곱으로 나눈 값"을 의미합니다.
예: 마지막 치수를 제외한 모든 치수를 평평하게 하려면:
>>> arr = numpy.zeros((50,100,25))
>>> new_arr = arr.reshape(-1, arr.shape[-1])
>>> new_arr.shape
# (5000, 25)
Peter의 답변에 대한 약간의 일반화 - 3차원 배열을 넘어서려면 원래 배열의 모양에 대한 범위를 지정할 수 있습니다.
예: 마지막 두 차원을 제외한 모든 차원을 평평하게 하려면:
arr = numpy.zeros((3, 4, 5, 6))
new_arr = arr.reshape(-1, *arr.shape[-2:])
new_arr.shape
# (12, 5, 6)
편집: 이전 답변에 대한 약간의 일반화입니다. 물론 리쉐이프 시작 부분에서도 범위를 지정할 수 있습니다.
arr = numpy.zeros((3, 4, 5, 6, 7, 8))
new_arr = arr.reshape(*arr.shape[:2], -1, *arr.shape[-2:])
new_arr.shape
# (3, 4, 30, 7, 8)
대체 접근법은 다음과 같습니다.numpy.resize()
예를 들어 다음과 같습니다.
In [37]: shp = (50,100,25)
In [38]: arr = np.random.random_sample(shp)
In [45]: resized_arr = np.resize(arr, (np.prod(shp[:2]), shp[-1]))
In [46]: resized_arr.shape
Out[46]: (5000, 25)
# sanity check with other solutions
In [47]: resized = np.reshape(arr, (-1, shp[-1]))
In [48]: np.allclose(resized_arr, resized)
Out[48]: True
numpy.vstack
이 상황에 딱이다
import numpy as np
arr = np.ones((50,100,25))
np.vstack(arr).shape
> (5000, 25)
사용하는 것을 선호합니다.stack
,vstack
또는hstack
에 걸쳐서reshape
왜냐면reshape
데이터를 스캔하여 원하는 형태로 강제하는 것처럼 보입니다.예를 들어 열 평균을 취하려는 경우 문제가 발생할 수 있습니다.
여기 내가 말하는 것의 예가 있다.다음과 같은 어레이가 있다고 가정합니다.
>>> arr.shape
(2, 3, 4)
>>> arr
array([[[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4]],
[[7, 7, 7, 7],
[7, 7, 7, 7],
[7, 7, 7, 7]]])
형상 배열(3,8)을 얻기 위해 두 가지 방법을 모두 적용한다.
>>> arr.reshape((3,8)).shape
(3, 8)
>>> np.hstack(arr).shape
(3, 8)
하지만 각각의 경우에서 어떻게 재형성되었는지 살펴보면,hstack
원래 배열에서 계산할 수 있는 열 합계를 구할 수 있습니다.모양을 바꾸면 이 작업이 불가능합니다.
>>> arr.reshape((3,8))
array([[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 7, 7, 7, 7],
[7, 7, 7, 7, 7, 7, 7, 7]])
>>> np.hstack(arr)
array([[1, 2, 3, 4, 7, 7, 7, 7],
[1, 2, 3, 4, 7, 7, 7, 7],
[1, 2, 3, 4, 7, 7, 7, 7]])
언급URL : https://stackoverflow.com/questions/18757742/how-to-flatten-only-some-dimensions-of-a-numpy-array
'source' 카테고리의 다른 글
컴파일된 .pyc 파일을 .py 파일로 디컴파일 할 수 있나요? (0) | 2022.09.15 |
---|---|
브라우저 뒤로 버튼 이벤트 검출 방법 - 크로스 브라우저 (0) | 2022.09.13 |
조인 없이 여러 테이블에서 선택하시겠습니까? (0) | 2022.09.13 |
PHP7의 개체 배열을 암시하는 함수 반환 형식 (0) | 2022.09.13 |
Jsoup 소켓 타임아웃예외: 읽기 시간이 초과되었습니다. (0) | 2022.09.13 |