Python:在矩阵上随机选择而不选择同一行上的数字

时间:2016-11-06 15:06:52

标签: python random

我遇到了一个问题,因为我希望通过随机选择实现矩阵,从前一列替换,而不选择与此元素位于同一行的数字。

例如:

#I create a matrix "pop" where there are numbers in the first and second column and where there are zeros on the other columns
tab = np.array([[3, 2, 1, 0, 4, 6], [9, 8, 7, 8, 2, 0]]) 
tab1=tab.transpose()
pop=np.zeros((6,8),int)
pop[:,0:2]=tab1

#I create a function "cuntage" which complete the matrix "pop" by a 
#random sampling with replacement  from the second previous column 
def countage (a):
    for i in range (0,6):
        pop[i,a]=np.random.choice(pop[:,(a-2)],1,replace=True)


# loope to complete the array "pop"
for r in range(2,8):
    countage(r)

pop

但问题是我希望通过从第二个前一列中随机选择,选择矩阵的每个元素,但不选择与此元素位于同一行的数字。

例如,在矩阵弹出窗口中,元素pop [0,2]在pop [1:6,0]中被选中。

感谢您的回复!!

- )

1 个答案:

答案 0 :(得分:1)

您可以将所需的阵列粘合在一起

toChooseFrom = np.concatenate((pop[:i,(a-2)], pop[(i+1):,(a-2)]))

然后像你一样使用np.random.choice:

pop[i,a]=np.random.choice(toChooseFrom,1,replace=True)

在上面给出的示例中,元素pop [0,2]将从两个数组的串联中进行选择

pop[:i,(a-2)] == pop[:0,0] == []
pop[(i+1):,(a-2)] == pop[1:6,0]

只是

pop[1:6,0]