Μπορεί παράλληλα οδεύσεων να γίνει σε MATLAB όπως ακριβώς και στην Python;

ψήφοι
8

Χρησιμοποιώντας τη zipλειτουργία, Python επιτρέπει βρόχους να διασχίσει πολλαπλές ακολουθίες παράλληλα.

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

Μήπως MATLAB έχουν ισοδύναμη σύνταξη; Αν όχι, ποιος είναι ο καλύτερος τρόπος για να επαναλάβει πάνω από δύο παράλληλες σειρές ταυτόχρονα χρησιμοποιώντας MATLAB;

Δημοσιεύθηκε 08/09/2008 στις 07:25
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
5

Αν δεν κάνω λάθος η λειτουργία zip που χρησιμοποιείτε σε python δημιουργεί ένα ζευγάρι από τα αντικείμενα που βρέθηκαν στην list1 και list2 . Βασικά εξακολουθεί να είναι ένα for loop με την προσθήκη ότι θα ανακτήσετε τα δεδομένα από τις δύο ξεχωριστές λίστες για εσάς, αντίθετα, ότι πρέπει να το κάνετε μόνοι σας.

Έτσι ίσως η καλύτερη επιλογή σας είναι να χρησιμοποιήσετε ένα πρότυπο για βρόχο, όπως αυτό:

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

ή ό, τι έχει να κάνει με τα δεδομένα.

Αν πραγματικά μιλάμε για parallel computing τότε θα πρέπει να ρίξετε μια ματιά στην Παράλληλη Computing Toolbox για το Matlab, και πιο συγκεκριμένα στην parfor

Απαντήθηκε 08/09/2008 στις 10:34
πηγή χρήστη

ψήφοι
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
Απαντήθηκε 09/09/2008 στις 01:32
πηγή χρήστη

ψήφοι
13

Αν x και y είναι στήλη φορείς, που μπορείτε να κάνετε:

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

(με φορείς γραμμή, απλά χρησιμοποιήστε xκαι y).

Εδώ είναι ένα παράδειγμα λειτουργίας:

>> 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
>> 
Απαντήθηκε 15/09/2008 στις 18:20
πηγή χρήστη

ψήφοι
-2

for βρόχων σε MATLAB χρησιμοποιείται για να είναι αργή, αλλά αυτό δεν είναι πια αλήθεια.

Έτσι vectorizing δεν είναι πάντα η λύση θαύμα. Απλά χρησιμοποιήστε το profiler, και ticκαι tocλειτουργίες για να σας βοηθήσει να εντοπίσετε πιθανά σημεία συμφόρησης.

Απαντήθηκε 26/09/2008 στις 10:31
πηγή χρήστη

ψήφοι
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

Αυτό θα λειτουργήσει μεγάλη, αν σας λειτουργίες μπορεί να συνεργαστεί με φορείς. Από την άλλη, πολλές λειτουργίες μπορεί να λειτουργήσει ακόμη και με πίνακες, έτσι δεν θα χρειάζεται καν το βρόχο.

Απαντήθηκε 20/10/2008 στις 13:22
πηγή χρήστη

ψήφοι
0
for (x,y) in zip(List1, List2):

θα πρέπει να είναι για παράδειγμα:

>> for row = {'string' 10
>>           'property' 100 }'
>>    fprintf([row{1,:} '%d\n'], row{2, :});
>> end
string10
property100

Αυτό είναι δύσκολο, επειδή το κύτταρο είναι περισσότερο από 2x2, και το κύτταρο είναι ακόμα μεταφερθεί. Παρακαλώ δοκιμάστε αυτό.

Και αυτό είναι ένα άλλο παράδειγμα:

>> cStr = cell(1,10);cStr(:)={'string'};
>> cNum=cell(1,10);for cnt=1:10, cNum(cnt)={cnt};
>> for row = {cStr{:}; cNum{:}}
>>    fprintf([row{1,:} '%d\n'], row{2,:});
>> end
string1
string2
string3
string4
string5
string6
string7
string8
string9
string10
Απαντήθηκε 01/02/2019 στις 13:52
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more