dolaşımları sadece Python gibi MATLAB'da yapılabilir paralel mi?

oy
8

Kullanma zipdöngüler paralel olarak birden fazla dizileri çapraz geçiş işlevini Python sağlar.

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

MATLAB eşdeğer bir sözdizimi var mı? Değilse, MATLAB kullanarak aynı anda iki paralel diziler üzerinde yineleme için en iyi yolu nedir?

Oluştur 08/09/2008 saat 07:25
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
5

Yanılmıyorsam Eğer python kullanmak zip fonksiyonu Liste1 ve list2 bulunan öğelerin bir çift oluşturur . Temel olarak hala bunu kendiniz yapmak zorunda bunun yerine, sizin için iki ayrı listelerden veri getireceğini eklenmesiyle bir için döngü.

Yani belki en iyi seçenek bir kullanmaktır standardını böyle döngü:

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

ya verilerle yapmak zorunda neyse.

Gerçekten paralel bilgi işlem bahsedecek olursak o zaman bakmak gerekir Paralel Hesaplama Toolbox Matlab için ve daha özel olarak parfor

Cevap 08/09/2008 saat 10:34
kaynak kullanıcı

oy
3

(Hayır matlab lisans) ... sadece oktav içinde test edilmiştir. arrayfun varyasyonları () belgelerine bakın mevcuttur.

#!/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

Verim ...

x =

   11   22   33
Cevap 09/09/2008 saat 01:32
kaynak kullanıcı

oy
13

x ve y sütun vektörler iseniz, bunu yapabilirsiniz:

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

(satır vektörleri ile, sadece kullanımı xve y).

İşte bir örnek run:

>> 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
>> 
Cevap 15/09/2008 saat 18:20
kaynak kullanıcı

oy
-2

for MATLAB'da döngüler yavaş eskiden, ama artık doğru değildir.

Yani Vektörizasyonu her zaman mucize bir çözümdür. Sadece profilleyici ve ticve tocişlevleri olası darboğazları tespit yardımcı olur.

Cevap 26/09/2008 saat 10:31
kaynak kullanıcı

oy
1

Ben hesaplaması için iki diziyi katılmak için öneriyoruz:

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

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

senin fonksiyonları vektörler ile çalışabilir, bu büyük çalışacaktır. Sonra tekrar, birçok fonksiyonlar hatta matrisleri ile çalışabilir, böylece bile döngü gerek olmazdı.

Cevap 20/10/2008 saat 13:22
kaynak kullanıcı

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

örneğin olmalıdır:

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

Hücre 2x2 fazla olması ve hücre bile aktarılmış olduğu için bu zordur. Bu deneyin.

Ve bu başka bir örnek:

>> 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
Cevap 01/02/2019 saat 13:52
kaynak kullanıcı

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