首页 文章

整数矩阵到随机矩阵归一化

提问于
浏览
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 回答

  • 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) 步骤)

相关问题