#python #numpy
#python #numpy
Вопрос:
Я создаю массив numpy zero размером 10×5 и хочу заполнить каждый столбец перемешанным списком чисел от 1 до 10. Однако у меня проблема, потому что он заполняет только первый столбец, а list.pop() не работает, плюс я думаю, что мои вложенные циклы for, хотя я пытался использовать строку и настройки в другом порядке. Буду признателен за любую помощь.
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
Ответ №1:
Поскольку вы использовали pop в своем примере, я подумал, что вы, возможно, не захотите повторять в каждом столбце. 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]])
>>>
Комментарии:
1. причина, по которой я использовал циклы for для вставки, потому что позиции 1 и 10 важны для меня (1 означает самый любимый, а 10 — наименьший). Ваш способ означал бы, что я бы создавал и заполнял, а затем просматривал и находил.
2. метод doug имеет вероятность 1/10 выбора одного из 10 значений независимо от того, какие другие значения выбраны. Например, в последнем столбце его есть две 7 и три 5. Мой метод исправил, что один столбец имеет одно и только одно из 10 значений. Выберите тот, который вам нужен.
Ответ №2:
>>> 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.]])
Комментарии:
1. я хочу, чтобы в каждом столбце был перемешанный список от одного до 10.