我有一個numpy的陣列,其看起來像選擇從numpy的陣列的每一行的隨機樣品,不含負數
>>> a
array([[ 3. , 2. , -1. ],
[-1. , 0.1, 3. ],
[-1. , 2. , 3.5]])
我想選擇從隨機的每一行的值,但我想排除隨機抽樣中的-1值。
我目前做的是:
x=[]
for i in range(a.shape[0]):
idx=numpy.where(a[i,:]>0)[0]
idxr=random.sample(idx,1)[0]
xi=a[i,idxr]
x.append(xi)
,並得到
>>> x
[3.0, 3.0, 2.0]
這成爲大型陣列的速度有點慢,我想知道是否有一種方法可以有條件地選擇隨機來自原始a
矩陣的值不分別處理每行。
我沒有與任何NumPy的經驗,但我也能猜到樣本量生成一個隨機數比從數組中訪問數據花費的時間要長。追加到列表中也是如此。你有沒有分析你的程序,以確保你正在優化正確的事情? – torak 2010-06-30 16:24:04
我已經對程序進行了剖析,'idx'和'idxr'這兩行是最慢的,每次花費的時間幾乎相等。 – fideli 2010-06-30 17:11:56
您是否總是希望在每一行中具有相同數量的排除值?如果是這樣,你可以矢量化整個事情,並在沒有python循環的兩行代碼中執行它... – 2010-06-30 22:18:56