Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 求二维数组每行的中位数_Python_Arrays_Python 2.7_Multidimensional Array_Median - Fatal编程技术网

Python 求二维数组每行的中位数

Python 求二维数组每行的中位数,python,arrays,python-2.7,multidimensional-array,median,Python,Arrays,Python 2.7,Multidimensional Array,Median,我试图找到二维数组中每一行的中值。这是我迄今为止尝试过的,但我无法让它发挥作用。任何帮助都将不胜感激 def median_rows(list): for lineindex in range(len(Matrix)): sorted(Matrix[lineindex]) mid_upper = ((len(Matrix[lineindex]))/2 mid_lower = ((len(Matrix[lineind

我试图找到二维数组中每一行的中值。这是我迄今为止尝试过的,但我无法让它发挥作用。任何帮助都将不胜感激

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)

首先,明显的变量命名错误:
Matrix
未定义。您的意思可能是
list
,或者您的意思是将函数参数命名为
Matrix
。顺便说一句,
list
不是一个好的变量名,因为有Python数据类型
list
。另外,
Matrix
也不是一个好名字,因为变量名小写是一个很好的做法。此外,
srtd
未定义


纠正命名错误后,下一个问题是
sorted(xyz)
不修改
xyz
,而是返回
xyz
的排序副本。所以你需要把它分配给一些东西。好的,不要将其重新分配给
矩阵[lineindex]
,因为这样该函数会产生不希望的副作用,即更改传递给它的输入矩阵。

这应该会对您有所帮助。正如@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)

如果您想让事情简单化,请使用:

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])