[]

rastgele sayı üretme
elimde excel dosyasında 1440 (adet) satır ayrı veri var. bunları matlab yardımıyla yapay sinir ağlarında eğitmem lazım. ancak eğitmeden önce testing, training ve validation olmak üzere bu verilere 1, 2, 3 numaralarını rastgele vermem gerekiyor. veri sayısı çok olduğundan elle vermek istemiyorum. matlabda veya excelde bunun programını nasıl yazabilirim?

aşağıdaki formül 0 ile 1440 arasında rastgele tam sayı üretir. ama aynı sayıdan birden fazla olabilir.
=YUVARLA(S_SAYI_ÜRET()*(1440-0)+0;0)
edit: soruyu tekrar okuyunca yanlış anladığımı anladım. 1 2 3 arasında bir değer vermek istiyorsan;
=YUVARLA(S_SAYI_ÜRET()*(3-1)+1;0)
=YUVARLA(S_SAYI_ÜRET()*(1440-0)+0;0)
edit: soruyu tekrar okuyunca yanlış anladığımı anladım. 1 2 3 arasında bir değer vermek istiyorsan;
=YUVARLA(S_SAYI_ÜRET()*(3-1)+1;0)
- mahallenindelisi
(06.04.11 11:07:21 ~ 11:08:29)

=MOD(YUVARLA(S_SAYI_ÜRET()*10;0);3)+1
formulu 1-3 arası rastgele sayı üretir
formulu 1-3 arası rastgele sayı üretir
- €xpolerer
(06.04.11 11:08:43)

peki bu 1440 veriden 400'ü 1, 400'ü 2 ve 640'ı 3 olsun ve rastgele olsun desem çok mu şey istemiş olurum?
- nicktir gitsin
(06.04.11 11:25:13)

alttaki kod excel'de iş görüyor.
biraz kurcalanarak her türlü uygulamaya uygun hale getirilebilir.
Sub sayiuret()
For i = 1 To 1440
Cells(i, 1) = Int((3 * Rnd) + 1)
If Range("e1") = 1 And Cells(i, 1) = 1 Then 'eger gelen rakam 1se ve 1ler doluysa
If Range("e2") = 1 Then
Cells(i, 1) = 3
ElseIf Range("e3") = 1 Then
Cells(i, 1) = 2
Else
Do Until Cells(i, 1) <> 1 '1 gelmeyene kadar loop et
Randomize
Cells(i, 1) = Int((3 * Rnd) + 1)
Loop
End If
End If
If Range("e2") = 1 And Cells(i, 1) = 2 Then 'eger gelen rakam 2yse ve 2ler doluysa
If Range("e1") = 1 Then
Cells(i, 1) = 3
ElseIf Range("e3") = 1 Then
Cells(i, 1) = 1
Else
Do Until Cells(i, 1) <> 2 '2 gelmeyene kadar loop et
Randomize
Cells(i, 1) = Int((3 * Rnd) + 1)
Loop
End If
End If
If Range("e3") = 1 And Cells(i, 1) = 3 Then 'eger gelen rakam 3se ve 3ler doluysa
If Range("e1") = 1 Then
Cells(i, 1) = 2
ElseIf Range("e2") = 1 Then
Cells(i, 1) = 1
Else
Do Until Cells(i, 1) <> 3 '3 gelmeyene kadar loop et
Randomize
Cells(i, 1) = Int((3 * Rnd) + 1)
Loop
End If
End If
If Range("d1") = 400 Then Range("e1") = 1
If Range("d2") = 400 Then Range("e2") = 1
If Range("d3") = 640 Then Range("e3") = 1
Next i
End Sub
biraz kurcalanarak her türlü uygulamaya uygun hale getirilebilir.
Sub sayiuret()
For i = 1 To 1440
Cells(i, 1) = Int((3 * Rnd) + 1)
If Range("e1") = 1 And Cells(i, 1) = 1 Then 'eger gelen rakam 1se ve 1ler doluysa
If Range("e2") = 1 Then
Cells(i, 1) = 3
ElseIf Range("e3") = 1 Then
Cells(i, 1) = 2
Else
Do Until Cells(i, 1) <> 1 '1 gelmeyene kadar loop et
Randomize
Cells(i, 1) = Int((3 * Rnd) + 1)
Loop
End If
End If
If Range("e2") = 1 And Cells(i, 1) = 2 Then 'eger gelen rakam 2yse ve 2ler doluysa
If Range("e1") = 1 Then
Cells(i, 1) = 3
ElseIf Range("e3") = 1 Then
Cells(i, 1) = 1
Else
Do Until Cells(i, 1) <> 2 '2 gelmeyene kadar loop et
Randomize
Cells(i, 1) = Int((3 * Rnd) + 1)
Loop
End If
End If
If Range("e3") = 1 And Cells(i, 1) = 3 Then 'eger gelen rakam 3se ve 3ler doluysa
If Range("e1") = 1 Then
Cells(i, 1) = 2
ElseIf Range("e2") = 1 Then
Cells(i, 1) = 1
Else
Do Until Cells(i, 1) <> 3 '3 gelmeyene kadar loop et
Randomize
Cells(i, 1) = Int((3 * Rnd) + 1)
Loop
End If
End If
If Range("d1") = 400 Then Range("e1") = 1
If Range("d2") = 400 Then Range("e2") = 1
If Range("d3") = 640 Then Range("e3") = 1
Next i
End Sub
- cakabo
(06.04.11 12:53:33)

rand() ile b sütununda 1440 tane sayı üretip şunu kullanabilirsiniz 400, 400, 640 için: =IF(B2<400/1440,1,IF(B2<800/1440,2,3))
tabii 3-5 oynama olur, 1440 küçük bi sayı.
tabii 3-5 oynama olur, 1440 küçük bi sayı.
- galadnikov
(06.04.11 13:15:26 ~ 13:15:57)

Ödev filan değilse, gerçketen bilimsel araştırma yapıyorsanız Excel veya MATLAB'ın içindeki fonksiyonlarla rastlantısal sayı üretmeyin. Periyodu çok daha büyük olan C rutinleri var, onlara bakın derim. Belki MATLAB için de bu tür kodlar yazılmıştır.
- sourlemonade
(06.04.11 13:47:56)
1