Soru Matlab'da bir sütun vektörü üzerinde yineleme nasıl yapılır? [çift]


Olası Kopyalama:
MATLAB'da n boyutlu bir matristeki her elemanın üzerinden nasıl yineleyebilirim? 

Bir sütun vektörüm var list Bu şekilde yinelemek istediğim:

for elm in list
   //do something with elm

Nasıl?


44
2017-08-11 18:15


Menşei


Ben de biliyoruz ki, "matrix matlab üzerinde yineleyin" terimleri googling, 2 numaralı sonuç olarak stackoverflow döndürür. - James


Cevaplar:


Matlab'da, listedeki öğeler üzerinde doğrudan yineleyebilirsiniz. Şu anda üzerinde çalıştığınız öğeyi bilmeniz gerekmiyorsa bu yararlı olabilir.

Böylece yazabilirsiniz

for elm = list
%# do something with the element
end

Matlab'ın sütunların içinden geçtiğini unutmayın. listeğer öyleyse list bir nx1 vektörü, onu dönüştürmek isteyebilirsiniz.


80
2017-08-11 18:36



Ayrıca, içeren elemanların değerini değiştirmek istiyorsanız iyi değil - greg121
Listenin bir sütun veya satır vektörü olup olmadığını bilmiyorsanız, oldukça çirkin bir kombinasyon kullanabilirsiniz. (:)': for elm = list(:)'; %... ;end. Kombinasyon (:)' Matrislerden satır vektörleri de oluşturacak, bu yüzden dikkatli olun. - JaBe
Diyorsun ki (:).' sağ? Aksi takdirde, transfer operatörü yerine karmaşık konjugat operatörünü kullanıyorsunuzdur. - Sembei Norimaki
@SembeiNorimaki: Verilerinizin karmaşık sayılar içermediğini biliyorsanız, (:)' sadece iyi çalışır - kullanmak için iyi bir uygulama olsa da (:).' ne olursa olsun. - Jonas


for i=1:length(list)
  elm = list(i);
  //do something with elm.

29
2017-08-11 18:20





Matlab'da birçok fonksiyonla, hiç yinelemenize gerek yok.

örneğin, listedeki konumuyla çarpmak için:

m = [1:numel(list)]';
elm = list.*m;

Matlabdaki vektörize algoritmalar genel olarak daha hızlıdır.


5
2017-08-11 23:37





Her bir öğeye bir işlev uygulamak ve sonuçları bir çıktı dizisine koymak isterseniz, kullanabilirsiniz. arrayfun.

Diğerleri de belirttiği gibi, çoğu işlem için MATLAB'da döngülerden kaçınmak ve bunun yerine kodunuzu düzenleyin.


2
2017-08-12 14:33