获取数组平均值的更多pythonian方法
有时,我仍然难以适应编写代码的“更多Python方式”。。。现在我正在迭代一些值(x)。我有很多数组,我总是比较所有数组的第一个值,第二个值。。。简而言之:数组中所有项在数组中的位置的平均值获取数组平均值的更多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
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的答案可能是没有帮助的。你说的对,我误解了这个问题。