Как организовать цикл, чтобы перебрать столбцы, а затем сделать что-то - PullRequest
0 голосов
/ 14 июня 2019

Я полный новичок в 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

1 Ответ

0 голосов
/ 14 июня 2019

Вы можете использовать функцию 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] - количество строк.

...