2016-01-05 9 views
5

मेरे पास ज़ीरो से भरा 4 डी सरणी 'ए' आकार (2,3,4,4) है।NumPy सरणी एक 4 डी सरणी अनुक्रमणित करता है

import numpy as np 
a = np.zeros((2,3,4,4)) 

मैं भी आकार (2,3,4) के एक 3 डी सरणी 'बी' के कुछ सूचक मान जाता है (सभी के बीच 0 और 3) है।

मुझे क्या करना चाहते हैं के साथ 1.

मैं क्या कर सकते हैं, 'एक' ('एक' के 4 आयाम) कि 'बी' में सूचकांक से मेल खाती है में हर अंतिम सरणी के तत्व की जगह है छोरों के लिए 3 के साथ इस, जिन्हें आप नीचे:

for i in a.shape[0]: 
    for j in a.shape[1]: 
     for z in a.shape[2]: 
      a[i,j,z][b[i,j,z]] = 1 

लेकिन अगर वहाँ वैसे भी मैं पाशन से बच सकते हैं मैं सोच रहा था। करने के लिए कुछ इसी तरह:

a[b] = 1 

उत्तर

4

हाँ आप एक vectorized रूप में यह कर सकते हैं:

p,m,n,r = a.shape 
a.reshape(-1,r)[np.arange(p*m*n),b.ravel()] = 1 

यह और अधिक आसानी से उच्च आदेश ndarrays को सामान्य करना चाहिए।

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