Python 基于另一个矩阵的数字化形式对一个矩阵的项进行洗牌
我有一个问题,我需要根据另一个矩阵的数字化形式来洗牌一个矩阵的条目 假设我有一个填充了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数量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数量 我曾尝试
我曾尝试使用
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分别是行索引和列索引。输出是洗牌矩阵