2016-02-09 13 views
5
training_images = np.array([i for i in images if i not in validation_images]) 

उपरोक्त गलत है (जैसा कि नीचे एक टिप्पणी में उल्लेख किया गया है)। ऐसा करने का एक सही और तेज़ तरीका क्या है?नकली सरणी कुछ तत्वों को छोड़कर

मेरे validation_images सिर्फ

validation_images = images[::6] 

है और छवियों का आकार (60000, 784) है। यह एक numpy सरणी है।

वर्तमान विधि स्वीकार्य नहीं है क्योंकि यह बहुत धीमी है।

+0

ध्यान दें: [ 'सरणियों के लिए in' कोई मतलब नहीं है] (http://stackoverflow.com/questions/18320624/how-does-contains-work-for-ndarrays), इसलिए अपने वर्तमान कोड शायद नहीं कर रहा है वैसे भी आप क्या चाहते हैं। इसके अलावा, यह डुप्लिकेट से कैसे प्रभावित होना चाहिए? क्या आप बस हर पंक्ति को छोड़ना चाहते हैं जिसका सूचकांक 6 का एक गुण है? – user2357112

+0

मुझे यह नहीं पता था। लेकिन वैसे भी, मैं ऐसा करना चाहता हूं जो मैं वहां करना चाहता था। हाँ, मुझे डुप्लिकेट की परवाह नहीं है, मैं बस अपने सत्यापन सेट के लिए प्रत्येक 6 पंक्तियों में एक पंक्ति ड्रॉप करना चाहता हूं। –

उत्तर

4

मैं हमेशा इस तरह की चीजों के लिए boolean masks उपयोग कर रहा हूँ, आप विचार कर सकते हैं:

validation_images = images[~mask] 

NumPy सरणी पर गणितीय आपरेशन:

# Mask every sixth row 
mask = (np.arange(images.shape[0]) % 6) != 0 

# Only use the not masked images 
training_images = images[mask] 

सत्यापन सेट तो हर नकाबपोश तत्व होगा कार्य तत्व के अनुसार, modulo (%) प्रत्येक तत्व पर निष्पादित किया जाएगा और एक ही आकार के साथ एक और सरणी लौटाएगा। != 0 तत्व-वार भी काम करता है और यदि मॉड्यूल शून्य नहीं है तो तुलना करता है। तो मुखौटा सिर्फ एक सरणी है जिसमें False है जहां मान int * 6 और True नहीं है जहां यह है।

+0

np.arange (images.shape [0]) आप एक सरणी देता है, यही कारण है कि आप (इस% 6) ऐसा करने में सक्षम हैं! = 0? तुम वहाँ क्या कर रहे हो और यह क्यों काम करता है? क्या आप इसे समझा सकते हैं? –

+0

और यह काम करने के लिए, वैसे लगता है! –

+0

मैं संचालन के संदर्भ समझा अंत में एक छोटे पाठ संपादित किया है। – MSeifert

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