2010-11-19 2 views
19

스트레칭 나는 이런 NumPy 배열이 있습니다크기 조정 내가 파이썬에서 일 오전 NumPy와 배열

[1,5,9] 
[2,7,3] 
[8,4,6] 

가 어떻게 다음과 같은 뭔가를 스트레칭 할을?

[1,1,5,5,9,9] 
[1,1,5,5,9,9] 
[2,2,7,7,3,3] 
[2,2,7,7,3,3] 
[8,8,4,4,6,6] 
[8,8,4,4,6,6] 

이러한 사실은, 배열의 단지 이러한 여러 크기를하지 크기를 조정합니다, 그냥 몇 가지 예를 배열입니다.

저는이 부분에 익숙하지 않으며, 저의 머리를 감싸고 싶지 않습니다.

KennyTM의 대답은 매우 매끄러운입니다, 정말 당신의 사건을 위해 작동하지만 대안으로 배열 np.repeat을 시도 확대를 위해 조금 더 많은 유연성을 제공 할 수 그 @

답변

21

:

>>> a = np.array([[1, 5, 9], 
       [2, 7, 3], 
       [8, 4, 6]]) 

>>> np.repeat(a,2, axis=1) 
array([[1, 1, 5, 5, 9, 9], 
     [2, 2, 7, 7, 3, 3], 
     [8, 8, 4, 4, 6, 6]]) 

그래서이 함께 반복 수행 하나 개의 축, (당신은 할 수 있습니다로) 여러 축을 따라 그걸 얻기 위해, 단순히 중첩 np.repeat 통화 :

>>> np.repeat(np.repeat(a,2, axis=0), 2, axis=1) 
array([[1, 1, 5, 5, 9, 9], 
     [1, 1, 5, 5, 9, 9], 
     [2, 2, 7, 7, 3, 3], 
     [2, 2, 7, 7, 3, 3], 
     [8, 8, 4, 4, 6, 6], 
     [8, 8, 4, 4, 6, 6]]) 

또한 반복의 수 FO를 변화 할 수있다 r 초기 행 또는 열. (axis=0 때문에이 경우에는 행)의 각 행에 대해 반복 번째 인자가이 행 방향을 지정하는 list 때 여기

>>> np.repeat(a, [2,2,1], axis=0) 
array([[1, 5, 9], 
     [1, 5, 9], 
     [2, 7, 3], 
     [2, 7, 3], 
     [8, 4, 6]]) 

: 예를 들면, 당신은 마지막 행을 제외하고 각 행의 두 반복 싶어 .

+0

https : //docs.scipy. org/doc/numpy/reference/generated/numpy.repeat.html –

12
>>> a = numpy.array([[1,5,9],[2,7,3],[8,4,6]]) 
>>> numpy.kron(a, [[1,1],[1,1]]) 
array([[1, 1, 5, 5, 9, 9], 
     [1, 1, 5, 5, 9, 9], 
     [2, 2, 7, 7, 3, 3], 
     [2, 2, 7, 7, 3, 3], 
     [8, 8, 4, 4, 6, 6], 
     [8, 8, 4, 4, 6, 6]]) 
+2

, 그것은 크로네 커 제품의 : HTTP : //docs.scipy. org/doc/numpy/reference/generated/numpy.kron.html – krawyoti

+0

이 멋진 답변은 대용량 배열에 대한 내 컴퓨터에서 dtlussier의 대답에있는 반복 방법의 두 배가 걸립니다. –

1

불행히도 numpy는 분수 단계를 허용하지 않습니다 (알고있는 한). 해결 방법이 있습니다. 그것은 케니의 솔루션만큼 똑똑하지,하지만 기존의 인덱스를 사용한다 :

>>> a = numpy.array([[1,5,9],[2,7,3],[8,4,6]]) 
>>> step = .5 
>>> xstop, ystop = a.shape 
>>> x = numpy.arange(0,xstop,step).astype(int) 
>>> y = numpy.arange(0,ystop,step).astype(int) 
>>> mg = numpy.meshgrid(x,y) 
>>> b = a[mg].T 
>>> b 
array([[1, 1, 5, 5, 9, 9], 
     [1, 1, 5, 5, 9, 9], 
     [2, 2, 7, 7, 3, 3], 
     [2, 2, 7, 7, 3, 3], 
     [8, 8, 4, 4, 6, 6], 
     [8, 8, 4, 4, 6, 6]]) 

(dtlussier의 솔루션이 더 좋다) 사람이 궁금있어 경우