获取数组平均值的更多pythonian方法

获取数组平均值的更多pythonian方法,python,arrays,loops,mean,Python,Arrays,Loops,Mean,有时,我仍然难以适应编写代码的“更多Python方式”。。。现在我正在迭代一些值(x)。我有很多数组,我总是比较所有数组的第一个值,第二个值。。。简而言之:数组中所有项在数组中的位置的平均值 sum_mean_x = [] for i in range(0, int_points): for j in range(0, len(x)): mean_x.append(x[j][i]) sum_mean_x.append(sum(mean

有时,我仍然难以适应编写代码的“更多Python方式”。。。现在我正在迭代一些值(x)。我有很多数组,我总是比较所有数组的第一个值,第二个值。。。简而言之:数组中所有项在数组中的位置的平均值

   sum_mean_x = []
   for i in range(0, int_points):
       for j in range(0, len(x)):
           mean_x.append(x[j][i])
       sum_mean_x.append(sum(mean_x)/len(x))
       mean_x = []

我很确定这可以做得非常漂亮。我知道我可以把最后第二行改成类似于
sum\u mean\u x.append(mean\u x.mean)
但是,我想我错过了一些这样的魔术。

你的意思是

import numpy as np    

ar1 = [1,2,3,4,5,6]
ar2 = [3,5,7,2,5,7]

mean_list = []
for i, j in zip(ar1, ar2):
    mean_list.append(np.array([i,j]).mean())

print(mean_list)
[2.0, 3.5, 5.0, 3.0, 5.0, 6.5]

你是说什么

import numpy as np    

ar1 = [1,2,3,4,5,6]
ar2 = [3,5,7,2,5,7]

mean_list = []
for i, j in zip(ar1, ar2):
    mean_list.append(np.array([i,j]).mean())

print(mean_list)
[2.0, 3.5, 5.0, 3.0, 5.0, 6.5]

听起来,您试图做的是将列表列表视为一个二维数组,其中每个列表都是一行,然后平均每个列

实现这一点的明显方法是使用NumPy,使其成为实际的2D数组,然后只需按列调用。看,这比我要在这里添加的内容要好。:)

但如果你想坚持列表,按列有效地意味着换位,这意味着:

这仅在3.4+中的stdlib中存在,但它是基于PyPI的,如果您的Python太老了,您可以自己编写它。在边缘情况下正确处理错误是一件棘手的事情,因此您可能希望从
统计信息中查看代码,但如果您只处理接近1的值,则可以采用显而易见的方法:

def mean(iterable):
    total, length = 0.0, 0
    for value in iterable:
        total += value
        length += 1
    return total / length

听起来,您试图做的是将列表列表视为一个二维数组,其中每个列表都是一行,然后平均每个列

实现这一点的明显方法是使用NumPy,使其成为实际的2D数组,然后只需按列调用。看,这比我要在这里添加的内容要好。:)

但如果你想坚持列表,按列有效地意味着换位,这意味着:

这仅在3.4+中的stdlib中存在,但它是基于PyPI的,如果您的Python太老了,您可以自己编写它。在边缘情况下正确处理错误是一件棘手的事情,因此您可能希望从
统计信息中查看代码,但如果您只处理接近1的值,则可以采用显而易见的方法:

def mean(iterable):
    total, length = 0.0, 0
    for value in iterable:
        total += value
        length += 1
    return total / length
使用软件包进行数字处理。假设在纯Python中有以下三个列表:

a1 = [1., 4., 6.]
a2 = [3., 7., 3.]
a3 = [2., 0., -1.]
你想得到每个位置的平均值。在单个数组中排列向量:

import numpy as np
a = np.array([a1, a2, a3])
然后可以得到每列的平均值,如下所示:

>>> a.mean(axis=0)
array([ 2.        ,  3.66666667,  2.66666667])
使用软件包进行数字处理。假设在纯Python中有以下三个列表:

a1 = [1., 4., 6.]
a2 = [3., 7., 3.]
a3 = [2., 0., -1.]
你想得到每个位置的平均值。在单个数组中排列向量:

import numpy as np
a = np.array([a1, a2, a3])
然后可以得到每列的平均值,如下所示:

>>> a.mean(axis=0)
array([ 2.        ,  3.66666667,  2.66666667])

你能添加一个
int_points
x
的例子吗?首先,如果你有某种Python可编程的东西,比如
列表,或者如果你有(NumPy)数组,你能添加一个
int_points
x
,那么最具Python风格的方法可能就是调用,如果你有某种Python iterable,比如
列表
,或者如果你真的有(NumPy)数组,那么调用这个方法可能是获得某个东西的平均值的最类似Python的方法。我几乎是在写
zip(*arrs)
部分。奇怪的是,我使用了完全相同的变量名
arrs
@计算机伙伴:在过去的一个小时里,至少有5个问题的答案是
zip
,其中至少有2个问题使用了
arrs
作为变量名(尽管实际上有列表,但所有问题都提到了“数组”),所以也许这就是为什么我们两人都在想这个问题的原因?+1你击败了我,得到了完全相同的答案。我几乎是在写
zip(*arrs)
部分。奇怪的是,我使用了完全相同的变量名
arrs
@计算机研究员:在过去的一个小时里,至少有5个问题的答案是
zip
,其中至少有2个问题使用了
arrs
作为变量名(尽管实际上有列表,但所有问题都提到了“数组”)所以,也许这就是为什么我们两个人都这么想?像这样混合NumPy和迭代通常不是一个好主意。一旦你引入了NumPy,你可以在NumPy中更简单地完成整个事情(如果有必要的话,也可以更高效地完成),如图所示。将NumPy和迭代这样混合通常不是一个好主意。一旦你引入了NumPy,你可以在NumPy中更简单(而且更有效,如果这很重要的话)地完成整个事情,如图所示。问题是“我有很多数组”。因此,一个不超过2的答案可能没有帮助。你的真实答案是我误解了这个问题。问题是“我有很多数组。”所以一个不超过2的答案可能是没有帮助的。你说的对,我误解了这个问题。