2015-06-14 3 views
6

में प्रत्येक तत्व को जोड़ने के मूल्य मैं इससरणी अजगर

a= np.arange(4).reshape(2,2) 

array([[0, 1],[2, 3]]) 

मैं सरणी में प्रत्येक तत्व के लिए एक मूल्य जोड़ना चाहते हैं की तरह एक सरणी है। मैं अपने परिणाम वापसी चाहते हैं 4 सरणी

array([[1, 1],[2, 3]]) 

array([[0, 2],[2, 3]]) 

array([[0, 1],[3, 3]]) 

array([[0, 1],[2, 4]]) 

उत्तर

5
[a + i.reshape(2, 2) for i in np.identity(4)] 
1

इनपुट सरणी जिसमें मूल्यों जोड़े जाने के लिए कर रहे हैं और val, अदिश मूल्य जोड़े जाने के लिए है आप एक दृष्टिकोण है कि किसी भी के लिए काम करता उपयोग कर सकते हैं के रूप में a मानते हुए की तरह बहु-आयामी सरणी abroadcasting और reshaping का उपयोग कर। यहाँ कार्यान्वयन है -

shp = a.shape # Get shape 

# Get an array of 1-higher dimension than that of 'a' with vals placed at each 
# "incrementing" index along the entire length(.size) of a and add to a 
out = a + val*np.identity(a.size).reshape(np.append(-1,shp)) 

नमूना रन -

In [437]: a 
Out[437]: 
array([[[8, 1], 
     [0, 5]], 

     [[3, 2], 
     [5, 1]]]) 

In [438]: val 
Out[438]: 20 

In [439]: out 
Out[439]: 
array([[[[ 28., 1.], 
     [ 0., 5.]], 
     [[ 3., 2.], 
     [ 5., 1.]]], 

     [[[ 8., 21.], 
     [ 0., 5.]], 
     [[ 3., 2.], 
     [ 5., 1.]]], 

     [[[ 8., 1.], 
     [ 20., 5.]], 
     [[ 3., 2.], 
     [ 5., 1.]]], 

     [[[ 8., 1.], 
     [ 0., 25.]], 
     [[ 3., 2.], 
     [ 5., 1.]]], 

     [[[ 8., 1.], 
     [ 0., 5.]], 
     [[ 23., 2.], 
     [ 5., 1.]]], .... 

आप out से अलग सरणियों बनाना चाहते हैं, तो आप एक अतिरिक्त कदम का उपयोग कर सकते हैं: np.array_split(out,a.size)। लेकिन दक्षता के लिए, मैं उन सभी submatrices जैसे out[0] (पहले उप-मैट्रिक्स के लिए), out[1] (दूसरे उप-मैट्रिक्स के लिए) तक पहुंचने के लिए इंडेक्सिंग का उपयोग करने की सलाह दूंगा।

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