0

我有一个问题,我需要根据另一个矩阵的数字化形式对一个矩阵的条目进行洗牌。

假设我有一个用 0 或 1 填充的矩阵;np.random.choice([0, 1], size=100, p=[.9, .1])

然后,我采用另一个填充了 0-4 值的矩阵。np.random.choice([0, 1, 2, 3, 4], size=100, p=[.01, 0.3, 0.3, 0.29, .1])

我想做的是根据第二个矩阵的 bin 重新排列 0 和 1。因此,假设我在 bin 1 中有 24 个 0 和 4 个 1,我想做的是打乱 0 和 1 的条目,使它们保持在 bin 1 内,并且它们保持相同数量的 0 和 1。

我曾尝试使用np.where,np.random.shuffle但这并不能保持 0 和 1 的原始计数。

4

1 回答 1

0

好的,我找到了一个解决方案,我可以循环遍历多个矩阵和 bin。

a = np.array(pd.DataFrame(connections[M_a][M_b]['cMat']))

    for aw in groups:
        b = a[C_ == aw]
        np.random.shuffle(b)
        iz, jz = np.nonzero(C_ == aw)

        for i, j, v in zip(iz, jz, b):
            a[i, j] = v

在这种情况下,groups 是每个 bin 的值,范围从 0 到 n。a 是包含 0 和 1 的矩阵。C_ 是数字化矩阵。iz 和 jz 分别是行和列索引。输出是混洗后的矩阵。

于 2020-11-18T12:23:32.997 回答