假设我有一个带整数值的矩阵。我想使它成为随机矩阵(即矩阵中每行的总和等于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但非常接近它。不过,我怎样才能正确地规范化矩阵?
答案 0 :(得分:1)
您不能保证浮点数只是一个,但您可以使用np.around
仔细检查任意精度。
如果不通过pandas列循环,这可能更容易/更快。
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
(你不需要python 3.x中的.astype(float)
步骤