2011-11-01 161 views
1

我創建了一個10x5的numpy零數組,我希望在每列填充1-10的數字。然而,我有一個問題,因爲它只填充第一列和list.pop()不起作用,加上我認爲我嵌套for循環,即使我嘗試使用不同的順序的行和首選項。任何幫助將不勝感激。填充numpy數組

i = 0 
j = 0 

for column in matrix: 

    preferences = [1,2,3,4,5,6,7,8,9,10] 

    random.shuffle(preferences) 

    for number in preferences: 

     for row in matrix: 
      chosen = preferences.pop(0) 
      matrix[j,i] = chosen 
     j+= 1 

i+= 1 

回答

5

既然你在你的例子中使用的流行,我想你可能不希望每列中重複。 numpy.random.shuffle洗牌元素到位。

>>> M = N.repeat(N.arange(1,11), 5).reshape(10,-1) 
>>> M 
array([[ 1, 1, 1, 1, 1], 
     [ 2, 2, 2, 2, 2], 
     [ 3, 3, 3, 3, 3], 
     [ 4, 4, 4, 4, 4], 
     [ 5, 5, 5, 5, 5], 
     [ 6, 6, 6, 6, 6], 
     [ 7, 7, 7, 7, 7], 
     [ 8, 8, 8, 8, 8], 
     [ 9, 9, 9, 9, 9], 
     [10, 10, 10, 10, 10]]) 
>>> for i in range(5): 
... N.random.shuffle(M[:,i]) 
>>> M 
array([[ 3, 9, 7, 9, 2], 
     [ 5, 4, 2, 5, 3], 
     [ 8, 8, 8, 1, 4], 
     [ 1, 2, 6, 10, 8], 
     [ 2, 1, 9, 2, 5], 
     [ 7, 7, 10, 7, 1], 
     [ 4, 3, 5, 8, 9], 
     [ 6, 5, 4, 4, 7], 
     [10, 10, 3, 6, 6], 
     [ 9, 6, 1, 3, 10]]) 
>>> 
+0

我使用for循環插入的原因,因爲1和10的位置對我很重要(1表示最喜歡的,10表示最少)。你的方式意味着我會創建並填充然後通過並找到。 –

+0

道格的方法有1/10選擇10個值中的一個的機會,而不管其他值如何選擇。就像他最後一列有兩個7和三個5。我的方法修復了一列中只有一個值和每個值都有一個值。選擇一個你需要的。 – yosukesabai

+0

不錯的一個;從我+1。 – doug

1
>>> import numpy as NP 

>>> fnx = lambda v : NP.random.randint(1, 11, v) 
>>> A = NP.zeros(5, 10) 
>>> for c in range(A.shape[0]): 
     A[c,:] = fnx(10) 
>>> A = A.T 
>>> A 
    array([[ 5., 1., 3., 8., 5.], 
     [ 4., 10., 4., 3., 10.], 
     [ 6., 6., 3., 2., 7.], 
     [ 4., 4., 10., 5., 4.], 
     [ 8., 6., 6., 2., 10.], 
     [ 10., 9., 10., 6., 10.], 
     [ 7., 4., 2., 2., 7.], 
     [ 9., 2., 9., 4., 7.], 
     [ 10., 5., 3., 5., 7.], 
     [ 3., 9., 3., 3., 1.]]) 
+0

我想每個列中從1到10的混洗列表。 –

+0

@M_Moose:ok - 編輯我的回答 – doug