2012-04-07 9 views
10

मुझे आश्चर्य है कि क्या मल्टीडिमेंटल सरणी (यानी ndarray टाइप करें) के साथ दिए गए अक्षों के बिना न्यूमपी में प्रतियां बनाये जाने का कोई तरीका है। उदाहरण के लिए, मेरे पास 2 डी छवियों की एक सरणी है और मैं प्रत्येक को वेक्टर में फ़्लैट करना चाहता हूं। तो, ऐसा करने का एक आसान तरीका numpy.array([im.flatten() for im in images]) है, लेकिन यह प्रत्येक की प्रतियां बनाता है।NumPy में प्रतियां बनाये बिना बहुआयामी सरणी के अक्षों को कैसे फ़्लैट करें?

उत्तर

12

ravel यह:

>>> a = numpy.arange(25).reshape((5, 5)) 
>>> b = a.ravel() 
>>> b[0] = 55 
>>> a 
array([[55, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24]]) 

या यह reshape:

>>> a = numpy.arange(27).reshape((3, 3, 3)) 
>>> b = a.reshape((9, 3)) 
>>> b[0] = 55 
>>> a 
array([[[55, 55, 55], 
     [ 3, 4, 5], 
     [ 6, 7, 8]], 

     [[ 9, 10, 11], 
     [12, 13, 14], 
     [15, 16, 17]], 

     [[18, 19, 20], 
     [21, 22, 23], 
     [24, 25, 26]]]) 

अधिकांश परिस्थितियों में, इन दोनों के बजाय एक प्रति की तुलना में मूल सरणी के एक दृश्य के लौटने के लिए,।

+0

धन्यवाद! 'reshape' मेरे लिए चाल थी। मैंने सोचा कि यह मेरे 2 डी मैट्रिक्स और वैक्टर के बीच एक-से-एक मैपिंग तोड़ देगा। लेकिन नहीं, यह काम किया! –

7

आप अपने इनपुट सरणी के आकार को नहीं जानते हैं:

images.reshape((images.shape[0], -1)) 

-1 शेष आयाम बाहर काम करने के नयी आकृति प्रदान बताता है। यह मानता है कि आप छवियों के पहले अक्ष को फ़्लैट करना चाहते हैं।

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

  • कोई संबंधित समस्या नहीं^_^