치수 정보가 손실되지 않는 Numpy 인덱스 조각
나는 numpy를 사용하고 있으며 치수 정보를 잃지 않고 행을 색인화하고 싶습니다.
import numpy as np
X = np.zeros((100,10))
X.shape # >> (100, 10)
xslice = X[10,:]
xslice.shape # >> (10,)
이 예제에서 xslice는 이제 1차원이지만 (1,10)이 되었으면 합니다.R에서는 X[10,:,drop=F]를 사용합니다.마비 증상과 비슷한 것이 있습니까?문서에서 찾을 수 없었고 비슷한 질문이 나온 것도 보지 못했습니다.
감사합니다!
또 다른 해결책은 하는 것입니다.
X[[10],:]
또는
I = array([10])
X[I,:]
인덱스 목록(또는 배열)에 의해 인덱싱이 수행될 때 배열의 차원성이 유지됩니다.이것은 치수를 유지하는 것과 짜내는 것 중 하나를 선택할 수 있기 때문에 좋습니다.
아마 가장 쉬운 방법일 것입니다x[None, 10, :]
또는 동등하게(그러나 더 읽기 쉬운)x[np.newaxis, 10, :]
.None
또는np.newaxis
배열의 치수를 1만큼 늘려서 슬라이싱으로 치수를 제거한 후 원래대로 돌아갑니다.
기본값이 아닌 이유에 대해서는 개인적으로 싱글톤 차원의 어레이를 지속적으로 보유하는 것은 매우 빠르게 성가신 일이 됩니다.나는 그 멍청이들도 똑같이 느꼈을 거라고 생각합니다.
또한 numpy는 브로드캐스팅 어레이를 매우 잘 처리하므로 일반적으로 슬라이스가 원래 있던 어레이의 치수를 유지할 이유가 거의 없습니다.그렇다면 다음과 같은 것들이 있습니다.
a = np.zeros((100,100,10))
b = np.zeros(100,10)
a[0,:,:] = b
작동하지 않거나 구현하기가 훨씬 더 어려울 것입니다.
(또는 적어도 그것은 슬라이싱할 때 차원 정보를 떨어뜨리는 것 뒤에 있는 뚱딴지 개발자의 추론에 대한 내 추측입니다.
저는 몇 가지 합리적인 해결책을 찾았습니다.
쓰임numpy.take(X,[10],0)
이 이상한 색인을 사용합니다.X[10:11:, :]
기본값으로 설정하는 것이 이상적입니다.저는 왜 치수가 떨어졌는지 이해할 수 없었습니다.하지만 그건 바보같은...
여기 제가 더 좋아하는 대안이 있습니다.단일 숫자로 인덱싱하는 대신 범위로 인덱싱합니다.즉, 사용X[10:11,:]
(참고:10:11
11)을 포함하지 않습니다.
import numpy as np
X = np.zeros((100,10))
X.shape # >> (100, 10)
xslice = X[10:11,:]
xslice.shape # >> (1,10)
이것은 또한 더 많은 차원으로 이해하기 쉽게 만듭니다, 아닙니다.None
저글링을 하고 어떤 축을 어떤 인덱스를 사용할지 결정합니다.또한 어레이 크기와 관련하여 별도의 부기 작업을 수행할 필요가 없습니다.i:i+1
어떤 경우에도i
일반 인덱싱에 사용했을 수 있습니다.
b = np.ones((2, 3, 4))
b.shape # >> (2, 3, 4)
b[1:2,:,:].shape # >> (1, 3, 4)
b[:, 2:3, :].shape . # >> (2, 1, 4)
목록에 의한 인덱싱 또는 gnebehay에 의한 배열과 관련된 솔루션에 추가하기 위해 튜플을 사용할 수도 있습니다.
X[(10,),:]
런타임에 길이가 1일 수 있는 배열로 인덱싱하는 경우 특히 번거롭습니다.그 경우에는,np.ix_
:
some_array[np.ix_(row_index,column_index)]
계속 사용하고 있습니다.np.reshape
아래 그림과 같은 것을 달성하기 위해
import numpy as np
X = np.zeros((100,10))
X.shape # >> (100, 10)
xslice = X[10,:].reshape(1, -1)
xslice.shape # >> (1, 10)
언급URL : https://stackoverflow.com/questions/3551242/numpy-index-slice-without-losing-dimension-information
'programing' 카테고리의 다른 글
xlsxwriter에서 워크시트 순서를 변경할 수 있습니까? (0) | 2023.08.25 |
---|---|
MariaDB 업데이트 문에 대한 올바른 구문 (0) | 2023.08.25 |
UIView 블록 기반 애니메이션을 취소하려면 어떻게 해야 합니까? (0) | 2023.08.25 |
CSS 전환 효과는 이미지를 흐리게 하거나 이미지를 1px 이동합니다. 크롬에서? (0) | 2023.08.25 |
Angular 4+에서 보류 중인 모든 HTTP 요청을 취소/구독 해제하는 방법 (0) | 2023.08.25 |