복붙노트

[PYTHON] 언제 내가 hstack / vstack 대 vstack과 vs column_stack의 연결을 사용해야합니까?

PYTHON

언제 내가 hstack / vstack 대 vstack과 vs column_stack의 연결을 사용해야합니까?

간단한 질문 :이 각각의 방법의 장점은 무엇입니까? 올바른 매개 변수 (및 ndarray 모양)가 주어지면 모두 동일하게 작동하는 것 같습니다. 일부 작업을 수행합니까? 성능이 더 좋습니까? 어떤 기능을 사용해야합니까?

해결법

  1. ==============================

    1.이 함수 코드에 액세스 할 수 있습니까? 모두는 np.concatenate를 제외하고 파이썬으로 작성되었습니다. IPython 셸을 사용하면 ??.

    이 함수 코드에 액세스 할 수 있습니까? 모두는 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 문서에 다음이 추가되었습니다.

    np.block도 새로운 기능입니다. 사실, 중첩 된 목록을 따라 재귀 적으로 연결됩니다.

  2. ==============================

    2.numpy.vstack : 배열을 세로로 순서대로 스택합니다 (행 방향). np.concatenate (tup, axis = 0)와 유사합니다. 예제 참조 : https://docs.scipy.org/doc/numpy/reference/generated/numpy.vstack .html

    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)와 같습니다. 보기 참조 : https://docs.scipy.org/doc/numpy/reference/generated/numpy.hstack.html

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

    예:

    회색. 모양 = (n0, n1)

    np.vstack ((회색, 회색, 회색))은 shape (n0 * 3, n1)을 가지며, np.concatenate (회색, 회색, 회색), axis = 0)

    np.html (회색, 회색, 회색)은 shape (n0, n1 * 3)을 가지며 np.concatenate (회색, 회색, 회색), axis = 1)

    np.dstack ((회색, 회색, 회색)) 모양 (n0, n1,3)을 갖습니다.

  3. ==============================

    3.IPython에서는 이름 뒤에 ??을 입력하여 함수의 소스 코드를 볼 수 있습니다. hstack을 살펴보면, 실제로는 단지 vstack과 column_stack과 같이 concatenate를 감싸는 래퍼라는 것을 알 수있다.

    IPython에서는 이름 뒤에 ??을 입력하여 함수의 소스 코드를 볼 수 있습니다. hstack을 살펴보면, 실제로는 단지 vstack과 column_stack과 같이 concatenate를 감싸는 래퍼라는 것을 알 수있다.

    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)
    

    그래서 나는 당신에게 가장 논리적으로 들리는 이름을 가진 것을 사용하는 것 같습니다.

  4. from https://stackoverflow.com/questions/33356442/when-should-i-use-hstack-vstack-vs-append-vs-concatenate-vs-column-stack by cc-by-sa and MIT license