source

hstack/vstack vs append vs concontate vs column_stack을 언제 사용해야 합니까?

factcode 2023. 7. 23. 14:46
반응형

hstack/vstack vs append vs concontate vs column_stack을 언제 사용해야 합니까?

간단한 질문: 이러한 각 방법의 장점은 무엇입니까?올바른 매개 변수(및 어레이 모양)가 주어지면 모두 겉보기에 동일하게 작동하는 것 같습니다.제자리에서 작동합니까?성능이 향상되었습니까?어떤 기능을 사용해야 합니까?

행렬이 두 개인 경우에는 다음과 같이 사용하면 됩니다.hstack그리고.vstack:

행렬과 벡터를 쌓는다면,hstack사용하기 까다로워져서,column_stack더 나은 옵션:

두 벡터를 쌓으면 세 가지 옵션이 있습니다.

그리고.concatenate원시 형태는 3D 이상에서 유용합니다. 자세한 내용은 Numpy Illustrated 기사를 참조하십시오.

다음을 제외한 모든 함수는 파이썬으로 작성됩니다.np.concatenate사용하는 IPython 쉘과 함께??.

그렇지 않은 경우 코드 요약은 다음과 같습니다.

vstack
concatenate([atleast_2d(_m) for _m in tup], 0)
i.e. turn all inputs 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)첫 번째 축을 따라 연결되는 1-D 배열을 제외합니다. 참조: https://docs.scipy.org/doc/numpy/reference/generated/numpy.hstack.html

추가는 파이썬의 내장 데이터 구조를 위한 함수입니다.list목록에 요소를 추가할 때마다여러 요소를 추가하려면 다음을 사용합니다.extend간단히 말해서, numpy의 기능은 훨씬 더 강력합니다.

예:

회색이라고 가정합니다.모양 = (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)

그래서 저는 여러분에게 가장 논리적으로 들리는 이름을 가진 어떤 것이든 사용할 것이라고 생각합니다.

언급URL : https://stackoverflow.com/questions/33356442/when-should-i-use-hstack-vstack-vs-append-vs-concatenate-vs-column-stack

반응형