-
Data: 2013-07-06 10:02:30
Temat: Re: program do symulacji obróbki audio ?
Od: Miroslaw Kwasniak <m...@i...zind.ikem.pwr.wroc.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Michał Lankosz <m...@t...pl> wrote:
> największa próbka z 10-ciu kolejnych (pętla for, może da się ją ominąć?):
> data2 = max(data1(i:i+10));
i:i+10 to też pętla ;) Ale ukryta - taki zabieg nazywamy w octave/matlabie
wektoryzacją zagadnienia.
> liczby rozdzielone dwukropkiem oznaczają przedział
> tylko że trzeba w pętli ten wektor sklejać, tzn za każdym obiegiem pętli
> doklejać kolejną wartość, coś w rodzaju:
> data3 = [];
> for i=1:10:data_length % i inkementuje się co 10!
> data2 = max(data1(i:i+10));
> data3 = [data3, data2];
> endfor
> no i teraz już ten filter.
Modyfikacje Twojego rozwiązania:
1) Polecenia "data3 = []" i "data3 = [data3, data2]" to wygodny zapis dla
nieznanej długości data3, ale kosztują: w każym obiegu pętli wykonujesz
dodatkowo niepotrzebne operacje:
-- utwórz nową tablicę data3 o długości length(data3)+1
-- skopiuj starą do nowej
-- skasuj starą
Remedium: prealokacja tablicy
L=floor(length(data1)/10);
data3=zeros(1,L);
for i=1:L
data3[i]= max(data1((i-1)*10+(1:10)))
endfor
2) Na ogół 10<L, więc lepiej zmienić kolejność jawnej i niejawnej pętli,
jawne (czyli niezwektoryzowane) wykonują się wolniej
Remedium poniżej (przy założeniu, że data1 jest wektorem kolumnowym);
ii=1:10:length(data1);
data3=data1(ii).';
for i=1:9
data3=max([ data3; data1(i+ii).' ]);
endfor
3) Obie pętle można w tym zagadnienu zwektoryzować, ale tu opłacalność
pewnie żadna, a czytelność kodu spada:
l=length(data1);
i=ones(10,l/10);
i(1,:)=1:10:l;
i=cumsum(i);
data3=max(data1(i));
clear i;
;)
Następne wpisy z tego wątku
- 06.07.13 11:45 sundayman
- 07.07.13 01:16 Michał Lankosz
- 07.07.13 03:06 sundayman
- 07.07.13 12:43 Miroslaw Kwasniak
- 07.07.13 15:40 sundayman
- 07.07.13 18:59 Michał Lankosz
- 08.07.13 03:29 sundayman
- 08.07.13 08:15 Michał Lankosz
Najnowsze wątki z tej grupy
- "Wybitna" inteligencja AI
- test stereo
- Bluetooth stereo
- W USA budują pierwszą komercyjną elektrownię fuzji jądrowej
- Weryfikacja myjki ultradźwiękowej
- zasieg radaru
- Zmywarka Bosch SRV55T43EU - awaria
- Kod zniżkowy w TME do 26.09.2025
- SFP, 10G, simplex sc/apc
- [słabe wiatry powodują - przyp. JMJ] Energetyczny paraliż w Niemczech
- NxtPaper
- Programiści nie przestają zadziwiać świat
- Długi kabel zasilający a na końcu procek
- Dlaczego nam nie idzie
- Co czujnik to inna temperatura
Najnowsze wątki
- 2025-09-25 jęczy wspomaganie
- 2025-09-24 "Wybitna" inteligencja AI
- 2025-09-24 test stereo
- 2025-09-24 Bluetooth stereo
- 2025-09-24 Rzeszów => International Freight Forwarder <=
- 2025-09-24 Gdańsk => Delphi Programmer <=
- 2025-09-24 Warszawa => BI Developer / Analityk BI <=
- 2025-09-24 Alior zmiana logowania
- 2025-09-24 Warszawa => Senior Microsoft Dynamics 365 Business Central Consultant
- 2025-09-24 Andżelika Borys odwiedziła [WIELKIEGO PATRIOTĘ - przyp. JMJ] Andrzeja Poczobuta w [białoruskiej - przyp. JMJ] kolonii karnej
- 2025-09-24 W USA budują pierwszą komercyjną elektrownię fuzji jądrowej
- 2025-09-24 W USA budują pierwszą komercyjną elektrownię fuzji jądrowej
- 2025-09-24 W USA budują pierwszą komercyjną elektrownię fuzji jądrowej
- 2025-09-24 W USA budują pierwszą komercyjną elektrownię fuzji jądrowej
- 2025-09-23 Re: Kolory już są