2008-09-08 22 views
7

zip फ़ंक्शन का उपयोग करके, पायथन समानांतर में एकाधिक अनुक्रमों को पार करने की अनुमति देता है।पाइथन में जैसे MATLAB में समांतर ट्रैवर्सल किया जा सकता है?

for (x,y) in zip(List1, List2):

MATLAB एक बराबर वाक्य रचना है? यदि नहीं, MATLAB का उपयोग कर एक ही समय में दो समांतर सरणीओं को फिर से शुरू करने का सबसे अच्छा तरीका क्या है?

उत्तर

5

यदि मुझे ज़िप कार्य को गलत नहीं किया गया है तो आप पाइथन creates a pair of the items found in list1 and list2 में उपयोग करते हैं। असल में यह अभी भी लूप के लिए एक लूप है जो आपके लिए दो अलग-अलग सूचियों से डेटा पुनर्प्राप्त करेगा, इसके बजाय आपको इसे स्वयं करना होगा।

तो हो सकता है आपके लिए सबसे अच्छा विकल्प इस तरह पाश के लिए एक मानक उपयोग करने के लिए है:

for i=1:length(a) 
    c(i) = a(i) + b(i); 
end 

या आप डेटा के साथ क्या करना है जो कुछ भी।

तुम सच में समानांतर कंप्यूटिंग के बारे में बात कर रहे हैं तो आप matlab के लिए Parallel Computing Toolbox पर एक नज़र रखना चाहिए, और अधिक विशेष रूप parfor

3

केवल सप्तक में परीक्षण किया गया ... (कोई matlab लाइसेंस) पर। Arrayfun() मौजूद हैं, दस्तावेज की जांच करें।

#!/usr/bin/octave -qf 

function result = dostuff(my_ten, my_one) 
    result = my_ten + my_one 
endfunction 

tens = [ 10 20 30 ]; 
ones = [ 1 2 3]; 

x = arrayfun(@dostuff, tens, ones); 

x 

पैदावार ...

x = 

    11 22 33 
13

x और y स्तंभ वैक्टर हैं, तो आप कर सकते हैं:

for i=[x';y'] 
# do stuff with i(1) and i(2) 
end 

(पंक्ति वैक्टर के साथ, बस x और y उपयोग करें)।

यहाँ एक उदाहरण रन है:

MATLAB में
>> x=[1 ; 2; 3;] 

x = 

    1 
    2 
    3 

>> y=[10 ; 20; 30;] 

y = 

    10 
    20 
    30 

>> for i=[x';y'] 
disp(['size of i = ' num2str(size(i)) ', i(1) = ' num2str(i(1)) ', i(2) = ' num2str(i(2))]) 
end 
size of i = 2 1, i(1) = 1, i(2) = 10 
size of i = 2 1, i(1) = 2, i(2) = 20 
size of i = 2 1, i(1) = 3, i(2) = 30 
>> 
+0

तो, '(+) 'के साथ एक सूची को ज़िपित करना, और' foo' को परिणाम असाइन करना 'i = [[1,2]; [3,4]] horzcat (foo, i (1)) + i (2)) अंत'। कितना भयानक डी: जितना अधिक मैं इसमें डाइविंग कर रहा हूं * (एक कोर्सरा असाइनमेंट के कारण) *, मुझे आश्चर्य है कि मैटलैब गणित कंप्यूटेशंस के लिए कितना बेकार है। मैं उत्परिवर्तन के साथ हास्केल की तरह कुछ की उम्मीद कर रहा था, यह पूरी तरह से बाहर नहीं है। –

-2

for छोरों धीमी गति से हुआ करता था, लेकिन यह अब और सच नहीं है।

तो वेक्टरिंग हमेशा चमत्कार समाधान नहीं होता है। संभावित बाधाओं की पहचान करने में आपकी सहायता के लिए बस प्रोफाइलर का उपयोग करें, और tic और toc फ़ंक्शंस का उपयोग करें।

+1

"tic" और "toc" होना चाहिए ... –

+1

मेरे अनुभव 'arrayfun' से * बहुत * धीमे 'के लिए' है, उदाहरण के लिए –

+1

Arrayfun कोई वेक्टरेशन नहीं है, यह केवल एक फैंसी दिखने वाला लूप है। – Daniel

1

मैं गणना के लिए दो सरणियों में शामिल होने की सलाह देते हैं:

% assuming you have column vectors a and b 
x = [a b]; 

for i = 1:length(a) 
    % do stuff with one row... 
    x(i,:); 
end 

यह महान काम करेंगे अपने कार्यों वैक्टर के साथ काम कर सकते हैं। फिर फिर, कई फ़ंक्शन मैट्रिस के साथ भी काम कर सकते हैं, इसलिए आपको लूप की भी आवश्यकता नहीं होगी।