2017-03-16 8 views
6

में वेक्टरकृत फ़ंक्शन के साथ संयोजन का मूल्यांकन करना जूलिया में, डॉट . के साथ वेक्टरकृत फ़ंक्शन तत्व-वार मैनिपुलेशन के लिए उपयोग किया जाता है।जूलिया

f.(x) चल रहा है इसका मतलब है f(x[1]), f(x[2]) ... क्रमिक रूप से

क्रियान्वित कर रहे हैं हालांकि, लगता है मैं एक समारोह जो दो तर्क लेता है, का कहना है कि g(x,y)

मैं चाहता हूँ g(x[1],y[1]), g(x[2],y[1]), g(x[3],y[1]), ... , g(x[1],y[2]), g(x[2],y[2]), g(x[3],y[2]) ...

वहाँ x औरके सभी संयोजन का मूल्यांकन करने का कोई तरीका है?

उत्तर

5

मैट का जवाब अच्छा है, लेकिन मैं एक विकल्प के एक सरणी समझ का उपयोग करते हुए प्रदान करने के लिए करना चाहते हैं:

julia> x = 1:5 
     y = 10:10:50 
     [i + j for i in x, j in y] 
5×5 Array{Int64,2}: 
11 21 31 41 51 
12 22 32 42 52 
13 23 33 43 53 
14 24 34 44 54 
15 25 35 45 55 

मेरी राय में सरणी समझ अक्सर अधिक पठनीय और broadcast और reshape तुलना में अधिक लचीला हो सकता है।

+1

सहमत! यह निश्चित रूप से अधिक पठनीय है। –

+0

धन्यवाद !! पठनीयता के मामले में, यह अच्छा लगता है, जबकि दोनों अच्छे हैं – sholi

5

हां, y को दोबारा बदलें, यह x पर ऑर्थोगोनल है। . वेक्टरनाइज़ेशन broadcast का उपयोग करने के लिए उपयोग करता है। मैं इसे अन्य सभी आयामों में सिंगलटन आयामों को "बाहर निकालने" के रूप में कल्पना करता हूं।

इसका मतलब है कि वैक्टर x और y के लिए, तो आप बस उनमें से एक देगी द्वारा x और y के सभी संयोजनों के उत्पाद मूल्यांकन कर सकते हैं:

julia> x = 1:5 
     y = 10:10:50 
     (+).(x, reshape(y, 1, length(y))) 
5×5 Array{Int64,2}: 
11 21 31 41 51 
12 22 32 42 52 
13 23 33 43 53 
14 24 34 44 54 
15 25 35 45 55 

ध्यान दें कि सरणी के आकार के उन्मुखीकरण से मेल खाता है तर्क; x पंक्तियों को फैलाता है और y स्तंभों को फैलाता है क्योंकि इसे एकल-पंक्ति मैट्रिक्स में स्थानांतरित किया गया था।

+1

यह भी ध्यान रखना चाहिए कि 'reshape' एक दृश्य बनाता है, और इस प्रकार एक अस्थायी सरणी नहीं बनाता है। तो ऐसा करने पर प्रदर्शन के बारे में कोई चिंता नहीं है। –

+1

क्या इस पर 'func (x, y।') ', या इस मामले में' x। + Y.'' 'को प्राथमिकता देने का कोई कारण है? ट्रांसपोज़ भी एक दृश्य बनाता है। ** संपादित करें: ** ओह, यह केवल संस्करण 0.6 पर है, 0.5 पर आपको reshape का उपयोग करना होगा, हालांकि इस मामले में स्मृति उपयोग से कोई फर्क नहीं पड़ता। – DNF

+0

हां। अभी, ट्रांसफर और ctranspose गैर-संख्यात्मक तत्वों के सरणी के लिए काम नहीं करते हैं। ऐसा लगता है कि बदल सकता है, शुक्र है। –