Opis problemu: - Chcę utworzyć 50 wystąpień wektora (1 wymiar) zawierającego losowe liczby rzeczywiste (zmiennoprzecinkowe). Rozmiar tablicy (1 wymiar) będzie wynosił 30 tysięcy.Jak postępować w taki sposób, aby narzut był minimalny lub złożoność jest minimalna?Jak skutecznie tworzyć duże losowe wektory, bez uciekania się do pętli?
Odpowiedz
N = 30000; %// length of your vectors
I = 50; %// number of instances
v = rand(I, N);
W powyższym przykładzie można wygenerować osnowie który każdy wiersz jest pojedynczym wektorem. Liczby losowe są generowane z równomierną dystrybucją (dla rozkładu Gaussa, użyj randn
).
Jeśli trzeba utworzyć każdy przypadek oddzielnie użyć pętli:
for i=1:I
v = rand(1, N);
%// do something with v
end
Ale nie będę używać, że gdybym był tobą (jest wolniejsza i mniej jasne IMHO).
EDIT:
chodzi o odpowiedź na pytanie pod MAU za:
Nie, nie trzeba do indeksu to na własną rękę. Pozwól Matlab zrobić to za Ciebie.
Na przykład, jeśli trzeba powtarzać następującą operację 50 razy:
x1 = sigma*y + beta * vect1;
...
x50 = sigma*y + beta * vect50;
zakładając y
jest wektorem wielkości 1x30000, można obliczyć ją w jednym wierszu:
X = sigma*repmat(y, 50, 1) + beta * rand(50, 30000);
wyjaśnienie: każdy wiersz jest pojedynczy wektor chciał obliczyć:
X(1,:) = x1;
...
X(50,:) = x50;
repmat(y,50,1)
powtórki s Twój wektor y
50 razy w pierwszym wymiarze (wiersze)
Tworzenie 50x30k macierz wartości losowych
values = rand(50, 30000)
czym każdy rząd będzie 30k-losowych wartości wektora
aVector = values(3,:) % Row 3, all columns
Pozwolę sobie wyjaśnić, że wektor to vect1, vect2 ....., vect50, z których każdy zawiera 30 tysięcy liczb rzeczywistych/float. Te zostaną zastąpione w równanie say x1 = sigma * y + vect1 (i) * beta, gdzie sigma i beta są stałymi. Czy nie potrzebuję pętli, aby uzyskać 30 000 wartości x? coś takiego: for i = 1: 50 dla j = 1: 300000 x (j) = sigma * y + vect (i) (j) * beta; koniec koniec – SKM
Nie, możesz napisać kod wektorowy, który używa dużej matrycy (i działa szybciej). Zobacz: http://www.mathworks.com/support/tech-notes/1100/1109.html#operators – Mau
@SKM: zobacz moją aktualizację. – Gacek
- 1. Jak mogę mnożyć wektory bez pętli?
- 2. Jak tworzyć wielowymiarowe wektory w Scali?
- 3. Jak skutecznie generować liczby losowe w mikrokontrolerze?
- 4. Kompilowanie plików .py do .pyo bez uciekania się do skryptu otoki
- 5. tworzyć pętli while z CTE
- 6. Jak mogę się dowiedzieć, jak duże jest duże pole tekstowe w Postgresie?
- 7. Jak skutecznie odzyskać najlepsze wektory podobne do K przez podobieństwo cosinusowe za pomocą R?
- 8. Windows Phone 7.5 tworzyć duże kafle (1x2, 2x1)
- 9. lista Python nie losowe w pętli
- 10. Losowe int bez importowania "losowy"
- 11. Wektory odniesień do obiektów
- 12. Jak porównać wektory z Boost.Test?
- 13. Jak tworzyć kawałki układanki bez użycia maski?
- 14. jak tworzyć żądania ściągania * bez * konta github?
- 15. Jak wygenerować n liczb losowych bez pętli for?
- 16. Wyjątki losowe losowania Selenium bez żadnej wiadomości
- 17. Jak dodać dwa wektory BEZ powtarzania w R?
- 18. Jak skutecznie skopiować texture1 do texture2?
- 19. Jak analizować duże pliki w Groovy bez przekraczania wielkości sterty?
- 20. Jak skutecznie renderować okno podwójnie buforowane bez efektu łzawienia?
- 21. Elasticsearch: Jak przechowywać wektory terminowe
- 22. Jak skutecznie używać Route53 do eksperymentów online?
- 23. Utwórz monotoniczną tablicę bez pętli Pythona.
- 24. Jak obsługiwać duże obrazy w programie Matlab bez wyczerpania pamięci?
- 25. jak połączyć wektory w Eigen?
- 26. Jak zmienić wartość kolumny DataTable bez pętli?
- 27. Jak zainicjować tablicę do czegoś w C bez pętli?
- 28. Jak korzystać AsynchronousFileChannel czytać do StringBuffer skutecznie
- 29. Jak skutecznie wydaj linek do dużego pliku w Powershell
- 30. Jak przechowywać duże liczby?
@ Gacek, jest to odpowiednik dla i = 1: 30000 dla j = 1: 50 v (i) (j) = rand(); % następnie używam pierwszego elementu v dla niektórych obliczeń x = sigma * y + v * beta; koniec koniec Mimo że jest to prymitywne. – SKM
@SKM: Nie, źle mnie zrozumiałeś. przykład z pętlą 'for' został podany, aby pokazać drugi sposób generowania takich wektorów. Zobacz moją aktualizację, mam nadzieję, że wyraźnie pokazuje rozwiązanie twojego problemu. Wiem, że może to być trochę trudne na początku, ale spróbuj zapomnieć o pętlach podczas korzystania z Matlaba. – Gacek
@ Gacek, dziękuję za poświęcony czas i wysiłek. – SKM