获取矩阵中元素的平均值

Get the Mean of the elements in a matrix

提问人:navidabasi 提问时间:10/13/2023 更新时间:10/20/2023 访问量:51

问:

大家好,我正在熟悉 Python 并遇到了一个问题 因此,我试图仅使用for循环和列表推导来获得矩阵的平均值。

这是代码:

def vector_mean(vectors):
    """Computes the element-wise average"""

    for v in vectors: # Returns [1,2],[3,4],[5,6]
        return(sum(v[i]/len(v)) for i in range(v))
    

assert vector_mean([[1, 2], [3, 4], [5, 6]]) == [3, 4]

vector_mean([[1, 2], [3, 4], [5, 6]])

所以问题是 Sum 方法在迭代矩阵(vector_mean)时存在问题 并在运行后出现以下错误:

TypeError:“list”对象不能解释为整数

谁能帮我用我的代码解决这个问题? 或者,如果您可以编辑我的代码并将其固定下来,那就太好了。

我相信应该得到每个较小列表中的第一个数字(1,3,5),然后将它们相互相加并将其除以 v 的长度。return(sum(v[i]/len(v)) for i in range(v)) part

python sum list-comprehension

评论

3赞 Mark 10/13/2023
有几件事:你可能不想进入你的循环,因为这将在第二次迭代之前结束循环。如果是向量,则不清楚应该怎么做。我不确定是否“允许”使用,但这是在 python 中获取列的正常方式——所以你的函数可以是一行。这将是一个列向量。returnvrange(v)zipreturn [sum(v)/len(v) for v in zip(*vectors)]v
0赞 user19077881 10/13/2023
您使用的是 Python 列表列表,而不是行/列意义上的矩阵。您应该研究 Numpy 模块,它使此类操作更容易(对于大型数据集来说要快得多)。
0赞 navidabasi 10/14/2023
@Mark 嘿马克,感谢您的重播,v 实际上是一个可迭代元素,例如循环中的“i”,在遍历向量的结果中,v 将是 [1,2] 然后是 [3,4] 等等;在这里,我计划将所有第一个值(即 (1,3,5) 求和并得到它们的平均值,并对每个较小列表中的第二个值执行相同的操作,因此代码完成后的结果应该是 [3,4]。
0赞 Mark 10/15/2023
如果是一个可迭代对象,你不需要,因为需要一个这样的数字,它将从 0 迭代到 4。您可能只想要 ,这将依次将每个元素分配给。vfor i in range(v)range()range(5)for i in vi

答:

0赞 Erik 10/20/2023 #1

下面我对你的尝试进行了修改。在函数中,我一次计算每个子列表的一个元素的平均值。因此,对于这个例子,我首先创建,然后计算平均值,然后在下一个循环中创建并计算平均值。vector_mean[1,3,5]3for[2,4,6]4

def vector_mean(vectors):
    """Computes the element-wise average"""
    nr_elements = len(vectors[0])
    mean_vec = []
    for i in range(nr_elements):
        mean_vec.append(sum([
            vec[i] for vec in vectors
        ]) / len(vectors))
    return mean_vec
    

assert vector_mean([[1, 2], [3, 4], [5, 6]]) == [3, 4]

vector_mean([[1, 2], [3, 4], [5, 6]])

评论

0赞 navidabasi 10/26/2023
谢谢!我刚刚运行了这段代码,它可以工作,但我必须仔细分析它;谢谢你的时间埃里克!