2016-06-07 64 views
2

我正在嘗試生成可能的大數組浮點數(0.0-1.0),但每個元素都由一個種子數組驅動,該數組由代表一個id的整數組成。用於隨機Numpy數組的元素智能種子

例如,如果我有這兩個數組:

seedArray1 = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
seedArray2 = np.array([0, 1, 2, 3, 4, 5]) 

我想能夠使用這些陣列作爲種子,但其中一個元件是在兩個陣列(相同的形狀,無論陣列,或其中該id發生在陣列中發生)的長度的,它應產生相同的浮動,這樣的:

[ 0.5488135 0.417022 0.4359949 0.5507979 0.96702984 0.22199317 0.89286015 0.07630829 0.8734294 0.01037415] 
[ 0.5488135 0.417022 0.4359949 0.5507979 0.96702984 0.22199317] 

然而,當我嘗試設置numpy.random的隨機種子,我得到了不同的結果:

import numpy as np 

x1 = np.arange(10) 
x2 = np.arange(6) 

np.random.seed(x1) 
print np.random.rand(x1.shape[0]) 

np.random.seed(x2) 
print np.random.rand(x2.shape[0]) 

它打印:

[ 0.41060638 0.23192123 0.91382737 0.02916066 0.91437242 0.51045425 0.26140116 0.16574922 0.08861477 0.31908955] 
[ 0.52500897 0.98236732 0.99371835 0.14121932 0.66945133 0.24223304] 

有沒有一種方法來生成隨機numpy的陣列,使用每個元素作爲種子,仍然利用numpy的的速度?

+0

這聽起來不是特別有效。這樣做的目的是什麼?你害怕在數據中產生高維相關性嗎? – Bort

+0

在一大組粒子中,我希望能夠使用它們的ID來挑選一定比例的點,但是要在不同的幀之間保持一致。每一幀都是自己的數組,一些粒子可以被刪除,一些可以被添加。 – goldleaf

回答

4

不是,沒有。 PRNG被設計用於輸出來自單個種子的多個數字流,並且numpy.random的API是圍繞這個設計的。如果你需要一個任意的,可重複的從整數映射到漂浮在[0, 1)之內的原因,你當然可以自己做循環。可能有其他這樣的映射會更容易和更快速地使用。

y = [np.random.RandomState(seed).rand() for seed in seed_array] 
+0

謝謝羅伯特,我想知道它是否不一定支持!感謝您的建議,並支持numpy! – goldleaf