【问题标题】:How to to arrange a loop in order to loop over columns and then do something如何安排循环以遍历列然后执行某些操作
【发布时间】:2019-06-14 17:20:47
【问题描述】:

我是 python 的新手,我目前正在尝试解决一个问题,该问题允许我取每列的平均值,但列数未知。

如果我知道它有多少列并单独进行每个计算,我想怎么做。我应该通过创建一个空列表并将列循环回其中来做到这一点。

import numpy as np
#average of all data not including NAN
def average (dataset):
    return np.mean (dataset [np.isfinite (dataset)])
#this is how I did it by each column separate
dataset = np.genfromtxt("some file")
print (average(dataset [:,0]))    
print (average(dataset [:,1]))
#what I'm trying to do with a loop
def avg (dataset): 
    for column in dataset:
        lst = []
        column = #i'm not sure how to define how many columns I have
        Avg = average (column)
        return Avg

【问题讨论】:

  • 你的意思是取指定轴的平均值吗?
  • 我只是想对一个numpy数组的每一列取平均值,但是每个数据集的列数不同

标签: python arrays loops numpy


【解决方案1】:

你可以使用 numpy.mean() 函数:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.mean.html

与:

np.mean(my_data, axis=0)

轴表示您是沿列还是沿行取平均值(轴 = 0 表示您取每列的平均值,即您要执行的操作)。输出将是一个向量,其长度与取平均值的列(或行)数相同,每个元素是相应列(或行)的平均值。您无需事先知道矩阵的形状即可。

您可以使用 for 循环来执行此操作,但这不是一个好主意 - 在 numpy 中循环矩阵很慢,而使用像 np.mean() 这样的向量化操作非常快。因此,一般来说,当使用 numpy 时,会尝试使用这些类型的内置操作,而不是尽可能循环遍历所有内容。

另外——如果你想要矩阵中的列数——它是

my_matrix.shape[1]

返回列数;

my_matrix.shape[0] 是行数。

【讨论】:

  • 我有一些包含 2 列数据的随机数据,但是当我使用 np.mean 时,当我想要每列的平均值时,我会得到一个平均值的答案
  • @user 不要忘记传递axis 参数。 np.mean(dataset) 将为您提供数组中所有值的平均值。 np.mean(data, axis=0) 将为您提供跨行的平均值数组(在您的情况下为 2),np.mean(dataset, axis=1) 将为您提供跨列的平均值数组(在您的情况下为 100)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多