大陣列取隨機部分 多演算法實現

2021-10-08 05:09:19 字數 1760 閱讀 3954

考慮到效能問題,如何快速從乙個巨大的陣列中隨機獲取部分元素。

比如有個陣列有100w個元素,從中不重複隨機選取10w個元素

生成量為100w大陣列

let defarr =

newarray

(1000000

)for

(let i =

0; i < defarr.length; i++

) defarr[i]

= i

快速生成乙個巨大陣列 使用array.from()

通過set特性,存放隨機數,這裡需要注意的是,沒有就add,有就遞迴,總之要保證遍歷的每一項都要找到乙個唯一隨機值,如果有就跳過就不能保證最後能獲取到10k個值。

const

randomnumhandle

=(arr, randomnum)

=>

,(v, i)

=> i)

;let resultset =

newset()

// 快速選取randomnum個元素

for(

let i =

0; i < randomnum; i++

)function

addnum()

else

}return array.

from

(resultset)

} console.

time

('a'

) console.

log(

randomnumhandle

(defarr,

100000))

console.

timeend

('a'

)// a: 117.224853515625ms

取乙個隨機數,按 (總數/採點個數 + 隨機數) 的方式取值

function

randomnum

(arr, randomnum)

return result

} console.

time

('b'

) console.

log(

randomnum

(defarr,

100000))

console.

timeend

('b'

)// b: 10.064208984375ms

1.生成乙個0 - arr.length 的隨機數

2.交換該隨機數字置元素和陣列的最後乙個元素,並把該隨機位置的元素放入結果陣列

3.迴圈生成乙個0 - arr.length - 1 的隨機數

4.交換該隨機數字置元素和陣列的倒數第二個元素,並把該隨機位置的元素放入結果陣列

依次類推,直至取完所需的10k個元素

function

shuffle

(arr,size)

return result

} console.

time

('c'

) console.

log(

shuffle

(defarr,

100000))

console.

timeend

('c'

)// c: 21.2099609375ms

個人推薦使用 洗牌演算法,如場景需要 統計學隨機取樣點演算法也很不錯哦

隨機取陣列,打亂陣列元素

隨機取陣列元素 dim xuan xuan openfile xuan.txt xuan split xuan,function rndint byval maxnum,byval minnum asp生成整數之間的隨機數函式 dim tmp if maxnum tmp minnum minnum ...

複製拼接陣列,取陣列指定部分

1 skip take 該方法速度比較慢,在迴圈中使用效率低 int bt int arr bt.skip 2 take 3 toarray 取陣列bt指定索引 2 後指定個數 3 包括索引 的元素,即取第3個到第6個元素值陣列arr 2 array.copy 在迴圈中使用效率高 int a new...

python 從陣列隨機取資料

在神經網路中,經常會用到批量樣本訓練。我們需要從陣列隨機取資料,主要有以下幾種方法 1 np.random.shuffle 將原陣列打亂 import numpy as np array np.random.randint 1,100,size 10 63 32 80 33 61 45 28 55 ...