Python 基于另一个矩阵的数字化形式对一个矩阵的项进行洗牌

Python 基于另一个矩阵的数字化形式对一个矩阵的项进行洗牌,python,numpy,shuffle,Python,Numpy,Shuffle,我有一个问题,我需要根据另一个矩阵的数字化形式来洗牌一个矩阵的条目 假设我有一个填充了0或1的矩阵np.random.choice([0,1],size=100,p=[.9,1]) 然后我取另一个矩阵,它填充了0-4之间的值np.随机选择([0,1,2,3,4],大小=100,p=[0.01,0.3,0.3,0.29,1]) 我想做的是根据第二个矩阵的箱子重新排列0和1。假设我在Bin1中有24个0和4个1,我想做的是将0和1的条目混洗,使它们保持在Bin1中,并且保持相同的0和1数量 我曾尝试

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

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

然后我取另一个矩阵,它填充了0-4之间的值<代码>np.随机选择([0,1,2,3,4],大小=100,p=[0.01,0.3,0.3,0.29,1])

我想做的是根据第二个矩阵的箱子重新排列0和1。假设我在Bin1中有24个0和4个1,我想做的是将0和1的条目混洗,使它们保持在Bin1中,并且保持相同的0和1数量


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

好的,我找到了一个解决方案,可以循环使用多个矩阵和容器

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
本例中的组是每个箱子的值,范围从0到n。 a是具有0和1的矩阵。 C_u是数字化矩阵。 iz和jz分别是行索引和列索引。输出是洗牌矩阵