【问题标题】:Sum n values of n-lists with the same index in Python在Python中对具有相同索引的n个列表的n个值求和
【发布时间】:2021-11-25 02:12:17
【问题描述】:

例如,我有 5 个列表,每个列表包含 10 个元素,每个列表都是用随机值模拟掷硬币生成的。

我通过以下方式获得包含 10 个元素的 5 个列表:

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 列求和,然后将该值附加到列表中,但我不知道该怎么做,我对使用数组了解不多。

【问题讨论】:

  • 你试过什么代码?这是一个家庭作业问题吗?
  • 我一直在尝试使用嵌套的 for 循环和 np.matrix() 但没有任何效果。不,这不是作业,它只是一个非常特殊的案例,可以帮助我理解 python 如何处理矩阵和数组。

标签: python numpy matrix plot random


【解决方案1】:

让你的函数 return 一个二维 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])

【讨论】:

  • 非常感谢!!我没有想过将 np.array 与另一个 np.array 一起使用。
  • 乐于助人! :)
  • 起作用的不是“将 np.array 与另一个 np.array 一起使用”,而是实际上 返回 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]

【讨论】:

  • 谢谢。我从来没有听说过很多方法和功能来做我所要求的!
猜你喜欢
  • 1970-01-01
  • 2011-03-20
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 2018-03-11
  • 1970-01-01
相关资源
最近更新 更多