[]

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

  • €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
  • 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ı.
  • 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
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler basond, compumaster, fraise, kibritsuyu, rakicandir
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.