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