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
'source' 카테고리의 다른 글
사용자 debian-message-main에 대한 액세스가 거부되었습니다. (0) | 2023.07.23 |
---|---|
defaultdict의 default_factory에 키를 전달하는 영리한 방법이 있습니까? (0) | 2023.07.23 |
PHP & localStorage; (0) | 2023.07.23 |
Git, 치명적:원격 끝이 예기치 않게 끊어졌습니다. (0) | 2023.07.23 |
이것은 무엇을 의미합니까?"Parse error: 구문 오류, 예기치 않은 T_PAAMAYIM_NEKUDOTAYIM" (0) | 2023.07.23 |