2015-11-11 3 views
2

Я пытаюсь найти медиану каждой строки двумерного массива. Это то, что я пробовал до сих пор, но я не могу заставить его работать. Любая помощь будет принята с благодарностью.Найти медиану каждой строки двумерного массива

def median_rows(list):    
    for lineindex in range(len(Matrix)): 
     sorted(Matrix[lineindex]) 

     mid_upper = ((len(Matrix[lineindex]))/2 
     mid_lower = ((len(Matrix[lineindex])+1)/2 
     if len(Matrix[lineindex])%2 == 0: 
      #have to take avg of middle two 
      median = (Matrix[mid_lower] + Matrix[mid_upper])/2.0 
      print "The median is %f" %median 
     else: 
      median = srtd[mid] 
      print "The median is %d" %median 


median_rows(Matrix) 

ответ

0

Во-первых, очевидные ошибки именования переменных: Matrix не определен. Вероятно, вы имели в виду list, или вы хотели назвать аргумент функции как Matrix. Btw list не является хорошим именем переменной, поскольку существует тип данных Python list. Также Matrix не является хорошим именем, так как это хорошая практика иметь имена переменных в нижнем регистре. Кроме того, srtd не определен.

После исправления ошибок именования следующая проблема: sorted(xyz) не изменяет xyz, но возвращает отсортированную копию xyz. Поэтому вам нужно что-то присваивать. Ну, не назначайте его обратно на Matrix[lineindex], потому что тогда функция будет иметь нежелательный побочный эффект изменения передаваемой матрицы ввода.

0

Это должно помочь вам немного. Как сказал @Rishi, было много проблем с именами переменных.

def median_rows(matrix): 
    for line in matrix: # line is each row of the matrix 
     sorted_line = sorted(line) # have to set the sorted line to a variable 
     mid_point = len(sorted_line)/2 # only need to do one, because we know the upper index will always be the one after the midpoint 
     if len(line) % 2 == 0: 
      # have to take avg of middle two 
      median = (sorted_line[mid_point] + sorted_line[mid_point + 1])/2.0 
      print "The median is %f" % median 
     else: 
      median = line[mid_point] 
      print "The median is %d" % median 

matrix = [[1,2,3,5],[1,2,3,7]] 

median_rows(matrix) 
1

Если вы хотите, чтобы держать вещи простыми, используйте numpy «s median:

matrix = numpy.array(zip(range(10), [x+1 for x in range(10)])).T 
# array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
#  [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]) 
np.median(matrix, axis=1) # array([ 4.5, 5.5]) 
Смежные вопросы