2010-11-19 22 views
19

germe ve böyle bir NumPy dizi var:yeniden boyutlandırma ve ben Python çalışıyorum bir NumPy dizi

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

nasıl aşağıdaki gibi bir şey onu germek mi?

[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] 

Bunlar aslında, diziler sadece bu birkaç boyut değil boyutlandırma olacak, sadece bazı örnek dizilerdir.

Bu konuda yeniyim ve yapmam gereken şeyi kafamın etrafına saracak gibi görünmüyorum.

KennyTM cevabı çok kaygan olduğunu ve gerçekten dava için çalışır, ancak alternatif olarak diziler np.repeat denemek genişletmek için biraz daha fazla esneklik sunar diye @

cevap

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]]) 

Yani, bu boyunca tekrarlayarak yapar tek eksenli, (isteyebileceğiniz gibi) birden eksenler boyunca bunu elde etmek için, basitçe yuva np.repeat aramalar:

>>> 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]]) 

Ayrıca tekrar sayısını fo değişebilir herhangi bir ilk satır veya sütun. (axis=0 çünkü bu durumda satır) her satır için tekrarlar ikinci argüman o sıra sıra belirten bir list olduğunda İşte

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

: Örneğin, eğer son satırdan kenara her satırın iki tekrarları istedi .

+0

https: //docs.scipy için makinemde dtlussier cevabındaki tekrarlama yöntemi iki kat daha uzun sürüyor. org/doc/numpy/başvuru/üretilen/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

, bu Kronecker ürün var: http: //docs.scipy. org/doc/numpy/reference/generated/numpy.kron.html – krawyoti

+0

bu cevap kadar soğuk, büyük diziler –

1

Maalesef, numpy kesirli adımlara izin vermez (bildiğim kadarıyla). İşte bir çözüm. Kenny'nin çözümü kadar zeki değil, ama geleneksel endeksleme kullanır:

>>> 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 çözümü iyidir) birisi merak ediyor durumda

İlgili konular