2010-07-06 9 views

Odpowiedz

4
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)

+0

@ 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

+0

@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

+0

@ Gacek, dziękuję za poświęcony czas i wysiłek. – SKM

4

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 
+0

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

+1

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

+0

@SKM: zobacz moją aktualizację. – Gacek

Powiązane problemy