2016-09-30 90 views
0

假設我有整數值的矩陣。我想使它成爲隨機矩陣(即矩陣中每行的總和等於1)整數矩陣到隨機矩陣歸一化

我創建了隨機矩陣,計算每行的總和並將行中的每個元素劃分爲行總和。

dt = pd.DataFrame(np.random.randint(0,10000,size=10000).reshape(100,100)) 
dt['sum_row'] = dt.sum(axis=1) 
for col_n in dt.columns[:-1]: 
    dt[col_n] = dt[col_n]/dt['sum_row'] 

之後,每一行的總和應該等於1.但事實並非如此。

(dt.sum_row_normalized == 1).value_counts() 
> False 75 
> True  25 
> Name: sum_row_normalized, dtype: int64 

據我所知,有些值並不完全是1,但非常接近它。不過,我怎樣才能正確地標準化矩陣?

+1

注意'3/2 == 1'在Python 2.嘗試轉換的兩個數字中的一個分工'float'first:'dt [col_n]/float(dt ['sum_row'])'。 –

回答

1

你不能保證浮點數只有一個,但你可以用np.around來精確檢查任意精度。

如果不通過熊貓列循環,這可能更容易/更快。

X = np.random.randint(0,10000,size=10000).reshape(100,100) 
X_float = X.astype(float) 
Y = X_float/X_float.sum(axis=1)[:,np.newaxis] 

sum(np.around(Y.sum(axis=1),decimals=10)==1) # is 100 

(你不需要.astype(float)步在Python 3.X)