2016-10-18 4 views
5

ऐसा करने के लिए मैं numpy/python सरणी दिनचर्या का उपयोग कैसे करूं?पायथन में 4 प्रतियों द्वारा प्रत्येक सरणी तत्व को कैसे प्रतिस्थापित करें?

उदा। अगर मैं सरणी [ [1,2,3,4,]] है, उत्पादन

[[1,1,2,2,], 
[1,1,2,2,], 
[3,3,4,4,], 
[3,3,4,4]] 

इस प्रकार होना चाहिए, उत्पादन डबल पंक्ति और स्तंभ आयामों की सरणी है। और मूल सरणी से प्रत्येक तत्व तीन बार दोहराया जाता है।

क्या मैं अब तक इस

def operation(mat,step=2): 
    result = np.array(mat,copy=True) 
    result[::2,::2] = mat 
    return result 

यह मैं सरणी

[[ 98.+0.j 0.+0.j 40.+0.j 0.+0.j] 
[ 0.+0.j 0.+0.j 0.+0.j 0.+0.j] 
[ 29.+0.j 0.+0.j 54.+0.j 0.+0.j] 
[ 0.+0.j 0.+0.j 0.+0.j 0.+0.j]] 

देता इनपुट

[[98 40] 
[29 54]] 

सरणी हमेशा भी आयाम का हो जाएगा के लिए है।

उत्तर

3

उपयोग np.repeat():

In [9]: A = np.array([[1, 2, 3, 4]]) 
In [10]: np.repeat(np.repeat(A, 2).reshape(2, 4), 2, 0) 
Out[10]: 
array([[1, 1, 2, 2], 
     [1, 1, 2, 2], 
     [3, 3, 4, 4], 
     [3, 3, 4, 4]]) 

स्पष्टीकरण:

सबसे पहले आप arrya आइटम को दोहरा सकते हैं:

In [30]: np.repeat(A, 3) 
    Out[30]: array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]) 

तो आप सभी की जरूरत परिणाम देगी है (आधारित आपके अपेक्षित परिणाम पर यह अलग हो सकता है):

In [32]: np.repeat(A, 3).reshape(2, 3*2) 
    array([[1, 1, 1, 2, 2, 2], 
     [3, 3, 3, 4, 4, 4]]) 

और अब आप पहले अक्ष के साथ परिणाम को दोहराने चाहिए:

In [34]: np.repeat(np.repeat(A, 3).reshape(2, 3*2), 3, 0) 
    Out[34]: 
    array([[1, 1, 1, 2, 2, 2], 
     [1, 1, 1, 2, 2, 2], 
     [1, 1, 1, 2, 2, 2], 
     [3, 3, 3, 4, 4, 4], 
     [3, 3, 3, 4, 4, 4], 
     [3, 3, 3, 4, 4, 4]]) 
+0

आप मापदंडों खुद के बारे में कुछ टिप्पणियाँ जोड़ सकते हैं? यह सहायक होगा। – CyprUS

+0

@ साइप्रस बस अपडेट किया गया। – Kasramvd

1

एक और दृष्टिकोण np.kron साथ हो सकता है -

np.kron(a.reshape(-1,2),np.ones((2,2),dtype=int)) 

असल में, हम एक 2D में इनपुट सरणी नयी आकृति प्रदान सरणी length=2 की दूसरी धुरी रखते हुए। फिर np.kron अनिवार्य रूप से 2 की लंबाई के लिए दोनों पंक्तियों और स्तंभों के साथ तत्वों को प्रतिलिपि बनाता है: np.ones((2,2),dtype=int)

नमूना रन -

In [45]: a 
Out[45]: array([7, 5, 4, 2, 8, 6]) 

In [46]: np.kron(a.reshape(-1,2),np.ones((2,2),dtype=int)) 
Out[46]: 
array([[7, 7, 5, 5], 
     [7, 7, 5, 5], 
     [4, 4, 2, 2], 
     [4, 4, 2, 2], 
     [8, 8, 6, 6], 
     [8, 8, 6, 6]]) 

आप 4 पंक्तियों के लिए चाहते हैं, तो a.reshape(2,-1) बजाय का उपयोग करें।

0

बेहतर समाधान numpy उपयोग करने के लिए है, लेकिन आप भी यात्रा इस्तेमाल कर सकते हैं:

a = [[1, 2, 3, 4]] 

v = iter(a[0]) 

b = [] 
for i in v: 
    n = next(v) 
    [b.append([i for k in range(2)] + [n for k in range(2)]) for j in range(2)] 

print b 

>>> [[1, 1, 2, 2], [1, 1, 2, 2], [3, 3, 4, 4], [3, 3, 4, 4]] 
संबंधित मुद्दे

 संबंधित मुद्दे