언제 hstack / vstack vs append vs concatenate vs column_stack을 사용해야합니까?
간단한 질문 : 이러한 각 방법의 장점은 무엇입니까? 올바른 매개 변수 (및 ndarray 모양)가 주어지면 모두 동일하게 작동하는 것 같습니다. 일부는 제자리에서 작동합니까? 더 나은 성능이 있습니까? 언제 어떤 기능을 사용해야합니까?
이러한 기능의 코드에 액세스 할 수 있습니까? 모두 Python으로 작성되었습니다 np.concatenate
. IPython 셸에서는 ??
.
그렇지 않다면 다음은 코드 요약입니다.
vstack
concatenate([atleast_2d(_m) for _m in tup], 0)
i.e. turn all imputs in to 2d (or more) and concatenate on first
hstack
concatenate([atleast_1d(_m) for _m in tup], axis=<0 or 1>)
colstack
transform arrays with (if needed)
array(arr, copy=False, subok=True, ndmin=2).T
append
concatenate((asarray(arr), values), axis=axis)
즉, 이들은 모두 입력 배열의 차원을 조정 한 다음 오른쪽 축에서 연결하여 작동합니다. 그들은 단지 편의 기능입니다.
그리고 최신 np.stack
:
arrays = [asanyarray(arr) for arr in arrays]
shapes = set(arr.shape for arr in arrays)
result_ndim = arrays[0].ndim + 1
axis = normalize_axis_index(axis, result_ndim)
sl = (slice(None),) * axis + (_nx.newaxis,)
expanded_arrays = [arr[sl] for arr in arrays]
concatenate(expanded_arrays, axis=axis, out=out)
즉, 모든 입력의 희미한 부분을 확장 np.expand_dims
한 다음 (예 :) 연결합니다. 를 사용 axis=0
하면 효과가 np.array
.
hstack
문서는 이제 다음을 추가합니다.
기능
concatenate
,stack
그리고block
일반적인 스택 및 연결 작업을 제공합니다.
np.block
또한 새로운 것입니다. 실제로 중첩 된 목록을 따라 재귀 적으로 연결됩니다.
numpy.vstack : 배열을 수직으로 배열 (행 방향) np.concatenate(tup, axis=0)
. 예와 동일합니다 : https://docs.scipy.org/doc/numpy/reference/generated/numpy.vstack.html
numpy.hstack : 배열을 수평 으로 순서대로 쌓습니다 (열 방식) np.concatenate(tup, axis=1)
. 첫 번째 축을 따라 연결되는 1D 배열을 제외하고와 동일합니다. 예 : https://docs.scipy.org/doc/numpy/reference/generated/numpy.hstack.html
append는 파이썬의 내장 데이터 구조에 대한 함수입니다 list
. 목록에 요소를 추가 할 때마다. 분명히 여러 요소를 추가하려면 extend
. 간단히 말해서, numpy의 기능은 훨씬 더 강력합니다.
예:
gray.shape = (n0, n1)이라고 가정합니다.
np.vstack((gray,gray,gray))
모양 (n0 * 3, n1)을 가질 것입니다. np.concatenate((gray,gray,gray),axis=0)
np.hstack((gray,gray,gray))
모양 (n0, n1 * 3)을 가질 것입니다. np.concatenate((gray,gray,gray),axis=1)
np.dstack((gray,gray,gray))
모양 (n0, n1,3)을 갖습니다.
IPython에서 함수 이름 뒤에를 입력하여 함수의 소스 코드를 볼 수 있습니다 ??
. 에서 살펴보면 hstack
우리가 그냥 래퍼의 주위에 실제로 있다고 볼 수있다 concatenate
(유사과 vstack
과 column_stack
) :
np.hstack??
def hstack(tup):
...
arrs = [atleast_1d(_m) for _m in tup]
# As a special case, dimension 0 of 1-dimensional arrays is "horizontal"
if arrs[0].ndim == 1:
return _nx.concatenate(arrs, 0)
else:
return _nx.concatenate(arrs, 1)
그래서 나는 당신에게 가장 논리적으로 들리는 이름을 가진 것을 사용한다고 생각합니다.
'IT story' 카테고리의 다른 글
DynamicMetaObject.BindInvokeMember의 결과로 void 메서드 호출을 어떻게 표현합니까? (0) | 2020.12.31 |
---|---|
onTrimMemory (int level) 이해 (0) | 2020.12.31 |
클라이언트 측 로직 또는 서버 측 로직? (0) | 2020.12.31 |
Python을 사용하여 이미지 파일을 어떻게 읽습니까? (0) | 2020.12.31 |
SKPaymentQueue addTransactionObserver가 인앱 구매 후 시작시 App Store 비밀번호를 요청 (0) | 2020.12.31 |