MATLAB: Nasıl bir dizi genişletmek için

R

RollingEEE

Guest
Merhaba, ben yeni bir vektör üretmek için bir vektör her sütunu tekrar eder bir kod arıyorum. Kodumu son derece zaman alıcı olduğunu. Hatta matlab bir dizi kullanmak için değil önerir yavaş yavaş 'darbeler'
Code:
 fonksiyonu y = genişletin (b, m) A = [] olduğunu; n = uzunluk (b); for i = 1: n A = [A olanları ( 1, m) * b (:, i)]; end y = A;
herhangi bir yardım Can.?
 
Eğer ne veriyorsun girişi küçük değerleri için kendi çalışma lütfen belirtiniz
 
Tüm değerler için çalışıyor. Matriks (4x2000 demek) büyük Ama eğer, o zaman bir cehennem çok alır
 
evet bu hesaplama bir sürü yapmak ve daha sonra RAM veya HDD ne olursa olsun bir değişkende saklamak zorunda çünkü alacak ama gerçekten hızlı bir bilgisayar gibi büyük hesaplamalar ile çalışmak gerekir
 
Matlab bazı gerçek becerileri ile başka herhangi biri?
 
[Quote = RollingEEE] matlab bazı gerçek becerileri ile başka herhangi biri? [/Quote] 4x2000 bir matris boyutu için, her zaman çok fazla zaman alacaktır. Matlab genellikle değişken büyüyor olabilir, ama genellikle çok fazla performans etkilemez bu uyarı verir. Bu yöntemi kullanmak istemiyorsanız Neyse, daha sonra kullanıcı işleve girdi olarak girdi matrisi vektörlerinin boyutu (b, m) isteyin, o zaman nerede, A = sıfır gibi bir değişken (1, L) oluşturmak A, bu gibi bir (i) = Değişken değerleri atarsınız L L uzunluğu değişken A Tabii döngü içinde büyüyen olmayacaktır Bu şekilde olabilir, daha sonra kodunuzda bazı değişiklikler yapmanız gerekir .... i 1 döngünün o anki dizin temsil eder: n bu yordamı deneyin, sonra daha fazla işlem zamanı aldığı süreci görmek için Matlab Profiler ile karşılaştırın.
 
Ben yeni bir vektör üretmek için bir vektör her sütunu tekrar eder bir kod arıyorum ... Ve geçmek genişletin; ------------------------- seni doğru anladıysam, eğer öyleyse, bir vektörü a = [; 3 4 1 2] istiyorum (a, 3) olsun 1 1 1 2 2 2 3 3 Bu doğru ise, bu uygulamanın doğru yolu bu gibi 3 4 4 4: fonksiyon y = expandB (b, m) y = yeniden şekillendirmek (repmat ( b ', 1, m)', uzunluğu (b :), 1)), m * uzunluk (b (1,:))); İşte bu. Sınama olarak, I = olanları (100, 1000) m = 500 benim sürüm 1,318641 saniye sürmüştür b geçti. Bir 100x1000 matris 500 kez dışarı fayans Thats! Communications_Engineer Bu yanlış, yanlış, yanlış "4x2000 bir matris boyutu için, her zaman çok zaman alacaktır" dedi. Matlab matrisler işlemek için SEVİYOR, size yapay yavaşlatmak yok bu yüzden bunu nasıl anlamak lazım var. Matlab için genel kural "Eğer bir for döngüsü kullanıyorsanız, muhtemelen yanlış yapıyorsun" dir. Cidden, Matlab döngü için optimize DEĞİLDİR. Daha sen herşeyi vektörize öğrenmek, daha iyi programları çalışır
 
Teşekkürler. Ama benim cevabım iyi olduğuna eminim. matris genişletmek için kron (A, birler (1, n)) kullanın. Bir satır ve basit [size = 2] [color = # 999999] Eklendi 2 dakika sonra: [/color] [/size] [quote = Communications_Engineer] [quote = RollingEEE] matlab bazı gerçek becerileri ile başka herhangi biri [/quote] 4x2000 bir matris boyutu için, her zaman çok fazla zaman alacaktır. [/Quote] Huh, benim kod 15 dakika çekmek için kullanılan, şimdi bir 4 x 80000 matris ile çalıştırmak için 2 saniye sürer
 
Nicely 'kron' fonksiyonunun kullanımı ile yapılır. Siz açıkça RollingEEE, sizin Matlab becerileri bir çok iyileştirme yapıyoruz. Ancak, benim çözüm hala daha hızlıdır. Bu fonksiyon iki karşılaştırmak olacaktır: function y = expandB (b, m) tik y = yeniden şekillendirmek (repmat (b ', 1, m)', uzunluğu (b :), 1)), m * uzunluk (b (1, :))); disp () 'repmat / şekillendirmek kullanarak' toc tic y = kron (b, birler (1, m)); disp ('kullanarak kron') toc yeniden şekillendirmek / repmat sadece yaklaşık 1/2 zaman alır çalıştırın. Farz edelim ki, biz 1 saniye ve 2 saniye arasındaki fark bahsediyoruz, ama bu bir forum, yani aynı sorun için farklı çözümler karşılaştırılarak değer. Çoğunlukla, bütün bu durum gerçekten Matlab nasıl işlediğini anlamak için ihtiyaç göstermektedir ve farkı sezgisel bir çözüm (döngü için kullanımı) yerine programlama ortamı hakkında öğrenme kullanıldığında yapar. [Size = 2] [color = # 999999] Eklenen 7 dakika sonra: [/color] [/size] hmmm, ilginç. N >> m, benimki daha hızlı çalışır eğer, bir mxn matris için ona döner, ama m >> n, o zaman senin daha hızlı çalışır. Ben bir süre için bu düşünmek zorunda ve ben makul bir açıklama ile gelip eğer görürsünüz
 
Muhtemelen haklısın, ama bunu yapabilirim gibi, matris genişleyen zaman yeniden şekillendirmek yöntemi çalıştığını sanmıyorum [1 2 3; 4 5 6] olarak [1 1 1 2 2 2 3 3 3; 4 4 4 5 5 5 6 6 6]? Kron yapabilirsiniz
 
Evet, iki fonksiyon eşdeğerdir. Kendiniz deneyin! >> Aa = 1 2 3 4 5 6 >> expandB (a, 3) yeniden şekillendirmek / Geçen süre repmat kullanarak 0,000406 saniye. ans = 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6
 

Welcome to EDABoard.com

Sponsor

Back
Top