2016-11-06 74 views
0

我有一個問題,因爲我想通過隨機選擇實現一個矩陣,替換前一列而不選擇與此行在同一行上的數字元件。Python:矩陣上的隨機選擇,沒有選擇同一行上的數字

例如:

#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中,pop [0,2]中的元素是在pop [1:6,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]