2016-09-30 100 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)