-
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
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- Propagation velocity v/c dla kabli RF
- Jakie natynkowe podwójne gniazdo z bolcem (2P+PE)
- Czujnik nacisku
- Protoków komunikacyjny do urządzenia pomiarowego
- Hiszpania bez pradu
- amperomierz w plusie
- 3G-nadal działa
- Historia pewnego miernika kalibratora
- Ustym 4k Pro i wyświetlacz
- Czemu rozwaliło celę?
- Wojna w portfelu
- Jaki trojfazowy licznik tuya lub podobny?
- Problem z dekoderem adresów
- Intel się wyprzedaje: po 10latach pchnęli pakiet kontrolny Altery za 1/4 kwoty zakupu
Najnowsze wątki
- 2025-05-19 lakier bezbarwny akrylowy
- 2025-05-19 Warszawa => JavaScript / Node / Fullstack Developer <=
- 2025-05-19 Wrocław => Key Account Manager (ERP) <=
- 2025-05-19 Warszawa => MLOps Engineer <=
- 2025-05-19 Zielona Góra => Konsultant wdrożeniowy Comarch XL (Logistyka, WMS, P
- 2025-05-19 Warszawa => Sales Executive / KAM <=
- 2025-05-19 Warszawa => Senior Key Account Manager IT <=
- 2025-05-19 Kraków => NMS System Administrator <=
- 2025-05-19 Kraków => NMS System Administrator <=
- 2025-05-19 Gliwice => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2025-05-19 Gliwice => Business Development Manager - Network and Network Security
- 2025-05-19 Warszawa => Spedytor Międzynarodowy <=
- 2025-05-19 Lublin => Programista Delphi <=
- 2025-05-19 Szczecin => Key Account Manager IT <=
- 2025-05-19 Wrocław => Controlling systems Consultant <=