programing

치수 정보가 손실되지 않는 Numpy 인덱스 조각

telebox 2023. 8. 25. 23:31
반응형

치수 정보가 손실되지 않는 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:1111)을 포함하지 않습니다.

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

반응형