numpy未返回正确的中位数值

1 投票
2 回答
1697 浏览
提问于 2025-04-18 18:38

好的,我有点困惑,我有一个列表,看起来像这样:

>>> _list
['-1.24235365387e-07', '-2.31373100323e-07', '-3.4561064219e-07', '-4.5226775879e-08', '-4.8495857305e-06', '-6.05262333229e-07', '-6.87756245459e-07', '1.01130316722e-06', '1.12310282664e-07', '1.49359255132e-06', '1.56048010364e-06', '2.43283432336e-07', '3.04787966681e-07', '3.44224562526e-06', '3.89199793328e-07', '4.61725496189e-07', '4.91574219806e-07', '6.42046115267e-07', '6.52594949337e-07', '7.29511505567e-07', '8.38829381985e-07', '8.59463647511e-07', '8.89956059753e-07']
>>> len(_list)
23

它的中位数是:

>>> _list[int(len(_list)/2)]
'2.43283432336e-07'

但是当我这样做的时候:

>>> median(array(_list,dtype=float))
4.6172549618900001e-07

我得到的中位数值是这样,我觉得我做错了什么。当我不使用浮点数的时候:

>>> median([-1,-2,-3,-4,-5,-6,-7,-8,-9,0,1,2,3,4,5,6,7,8,9])
0.0
>>> [-1,-2,-3,-4,-5,-6,-7,-8,-9,0,1,2,3,4,5,6,7,8,9][int(len([-1,-2,-3,-4,-5,-6,-7,-8,-9,0,1,2,3,4,5,6,7,8,9])/2)]
0

去掉数据类型后得到:

>>> median(array(_list))

Traceback (most recent call last):
  File "<pyshell#42>", line 1, in <module>
    median(array(_list))
  File "C:\Python27\lib\site-packages\numpy\lib\function_base.py", line 2718, in median
    return mean(part[indexer], axis=axis, out=out)
  File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 2716, in mean
    out=out, keepdims=keepdims)
  File "C:\Python27\lib\site-packages\numpy\core\_methods.py", line 62, in _mean
    ret = um.add.reduce(arr, axis=axis, dtype=dtype, out=out, keepdims=keepdims)
TypeError: cannot perform reduce with flexible type

如果有人能帮我指明正确的方向,我会很感激,谢谢。

2 个回答

0

抱歉,完全是我自己的错误,这些值是从我之前做的一个文本文件中读取的,所以它们的类型是字符串(str),而不是浮点数(float)。显然,这影响了numpy的使用,把它们转换成浮点数后,一切就正常了,真的是我自己的问题,抱歉。

4

我猜是因为_list里面装的是字符串——你的值是按字典顺序排列的,而不是按数字大小排列的。试着在把数据转换成浮点数后再重新排序一下。

撰写回答