कुछ चीजें यहाँ पर जा रहे हैं।
सबसे पहले, आप कैसे ==
जादू करता है देखने के लिए सक्षम होना चाहिए।
मान लीजिए कि हम एक सरल लेबल सरणी के साथ शुरू करते हैं। ==
एक वेक्टरीकृत फैशन में व्यवहार करता है, जिसका अर्थ है कि हम पूरे सरणी को स्केलर से तुलना कर सकते हैं और प्रत्येक तत्व की तुलना के मूल्यों से युक्त एक सरणी प्राप्त कर सकते हैं। उदाहरण के लिए:
>>> labels = np.array([1,2,0,0,2])
>>> labels == 0
array([False, False, True, True, False], dtype=bool)
>>> (labels == 0).astype(np.float32)
array([ 0., 0., 1., 1., 0.], dtype=float32)
पहले हम एक बूलियन सरणी मिलता है, और फिर हम तैरता के लिए मजबूर: गलत == 0 अजगर में है, और यह सच है == 1। तो हम एक सरणी के साथ हवा बनाते हैं जो 0 है labels
0 और 1 के बराबर नहीं है जहां यह है।
लेकिन वहाँ 0 की तुलना के बारे में कुछ खास नहीं है, लेकिन इसके बदले हम इसी तरह के परिणाम के लिए 1 या 2 या 3 करने के लिए तुलना कर सकते हैं:
>>> (labels == 2).astype(np.float32)
array([ 0., 1., 0., 0., 1.], dtype=float32)
वास्तव में, हम हर संभव लेबल पर पाश सकता है और इस सरणी उत्पन्न करते हैं। हम एक listcomp इस्तेमाल कर सकते हैं:
>>> np.array([(labels == i).astype(np.float32) for i in np.arange(3)])
array([[ 0., 0., 1., 1., 0.],
[ 1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 1.]], dtype=float32)
लेकिन यह वास्तव में numpy का लाभ लेने है। क्या हम क्या करना चाहते हैं प्रत्येक संभव लेबल प्रत्येक तत्व के साथ तुलना में है, IOW तुलना करने के लिए
>>> np.arange(3)
array([0, 1, 2])
>>> labels
array([1, 2, 0, 0, 2])
साथ
और यहाँ जहां numpy प्रसारण का जादू काम आती है। अभी, labels
एक है आकार की 1-आयामी वस्तु (5,)। यदि हम इसे आकार की 2-आयामी वस्तु (5,1) बनाते हैं, तो ऑपरेशन अंतिम धुरी पर "प्रसारण" करेगा और हमें प्रत्येक प्रविष्टि की तुलना करने के परिणामों के साथ आकार (5,3) का आउटपुट मिलेगा लेबल के प्रत्येक तत्व के साथ सीमा।
पहले हम None
(या np.newaxis
) का उपयोग करने के लिए labels
एक "अतिरिक्त" अक्ष में जोड़ सकते हैं, तो उसका आकार बदल रहा है:
>>> labels[:,None]
array([[1],
[2],
[0],
[0],
[2]])
>>> labels[:,None].shape
(5, 1)
और फिर हम तुलना कर सकते हैं (इस व्यवस्था हम थे की पक्षांतरित है पहले देख रहे हैं, लेकिन यह वास्तव में कोई फर्क नहीं पड़ता)।
>>> np.arange(3) == labels[:,None]
array([[False, True, False],
[False, False, True],
[ True, False, False],
[ True, False, False],
[False, False, True]], dtype=bool)
>>> (np.arange(3) == labels[:,None]).astype(np.float32)
array([[ 0., 1., 0.],
[ 0., 0., 1.],
[ 1., 0., 0.],
[ 1., 0., 0.],
[ 0., 0., 1.]], dtype=float32)
numpy में प्रसारण बहुत शक्तिशाली है, और पढ़ने के लायक है।
एक बहुत विस्तृत और अच्छा स्पष्टीकरण तो यहाँ आप कैसे गिनती कितने लोगों
b
में है। उदसिटी दीप लर्निंग कोर्स के माध्यम से जाने वाले अधिकांश लोगों को इस जवाब पर ठोकर खाई जानी चाहिए। – AgentX