#python #numpy #matrix #plot #random
Вопрос:
Например, у меня есть 5 списков по 10 элементов, каждый из которых сгенерирован со случайными значениями, имитирующими бросок монеты.
Я получаю свои 5 списков с 10 элементами следующим образом:
result = [0,1] #0 is tail #1 is head
probability = [1/2,1/2]
N = 10
list = []
def list_generator(number): #this number would be 5 in this case
for i in range(number):
n_round = np.array(rnd.choices(result, probability, k=N))
print(n_round)
list_generator(5)
And for example I would get this
[1 1 0 0 0 1 0 1 1 0]
[0 1 0 0 0 1 1 1 0 1]
[1 1 0 0 1 1 1 0 1 1]
[0 0 0 1 0 0 0 1 0 0]
[0 0 1 1 0 0 0 0 1 1]
Как я могу суммировать только числа того же столбца, я имею в виду, я хотел бы получить список, который добавляет значение 1 0 1 0 0 (первый столбец), затем этот список добавляется сумма из каждого второго жеребьевка каждого раунда, т. е. 1 1 1 0 0 (во втором столбце) и так далее с десяти бросков монеты
(Мне это нужно в списке, потому что я буду использовать это для построения графика)
Я думал о создании матрицы с каждым массивом и суммировании только n-го столбца и добавлении этого значения в список, но я не знаю, как это сделать, у меня мало знаний об использовании массивов.
Комментарии:
1. Какой код вы пробовали? И это проблема с домашним заданием?
2. Я пытался использовать вложенные циклы for и np.matrix (), но ничего не получалось. Нет, это не домашнее задание, это всего лишь особый случай, который помогает мне понять, как python работает с матрицами и массивами.
Ответ №1:
Пусть ваша функция return
представляет собой массив 2d numpy, а затем sum
вдоль требуемой оси. Отдельно вам не нужно передавать вероятность random.choices
, так как по умолчанию используются равные вероятности.
import random
import numpy as np
def list_generator(number):
return np.array([np.array(random.choices([0,1], k=10)) for i in range(number)])
a = list_generator(5)
>>> a
array([[0, 1, 1, 1, 0, 1, 1, 0, 0, 0],
[1, 0, 1, 0, 1, 1, 1, 1, 1, 0],
[1, 1, 0, 1, 1, 1, 0, 0, 1, 1],
[1, 1, 0, 0, 1, 1, 1, 1, 0, 0],
[0, 1, 1, 0, 0, 1, 1, 1, 0, 0]])
>>> a.sum(axis=0)
array([3, 4, 3, 2, 3, 5, 4, 3, 2, 1])
Комментарии:
1. Большое спасибо!! Я не думал использовать np.array с другим np.array.
2. Рад помочь! 🙂
3. То, что работает, — это не «использование использования np.массива с другим np.массивом», а скорее фактическое возвращение чего-то из
list_generator
функции. В исходном коде вы ничего не вернули из своей функции. Вместо этого вы просто напечатали строки массива.
Ответ №2:
Вы можете использовать numpy.random.randint
для генерации ваших рандомизированных данных. Затем используйте sum
, чтобы получить сумму столбцов:
import numpy as np
N = 10
data = np.random.randint(2, size=(N, N))
print(data)
print(data.sum(axis=0))
[[1 0 1 1 1 1 0 0 1 1]
[0 0 1 1 0 0 1 1 1 0]
[1 1 0 1 1 1 0 0 1 1]
[1 1 0 0 0 0 1 1 1 1]
[1 0 0 1 1 1 0 1 1 1]
[1 0 1 1 0 1 0 1 1 1]
[0 0 0 1 0 1 0 1 1 0]
[0 0 0 1 0 1 0 1 0 1]
[1 0 0 0 1 0 1 0 1 1]
[1 0 1 1 0 1 0 0 0 1]]
[7 2 4 8 4 7 3 6 8 8]
Комментарии:
1. Спасибо. Я никогда не слышал о множестве методов и функций, позволяющих делать то, о чем я просил!