ptython写一个中位数函数
时间: 2023-03-28 09:01:39 浏览: 77
好的,我可以回答这个问题。以下是一个 Python 中位数函数的示例代码:
```python
def median(lst):
n = len(lst)
s = sorted(lst)
return (s[n//2] if n % 2 == 1 else .5 * (s[n//2-1] + s[n//2]))
```
这个函数接受一个列表作为输入,返回该列表的中位数。如果列表长度为奇数,则中位数是排序后的中间元素;如果列表长度为偶数,则中位数是排序后中间两个元素的平均值。
相关问题
用hive udf写一个求中位数的函数
可以使用Hive自带的集成函数来计算中位数,也可以自定义UDF函数来实现。以下是一个使用自定义UDF函数的示例代码:
1. 首先,需要在Hive中创建一个UDF函数:
```
CREATE FUNCTION median AS 'com.example.hive.udf.MedianUDF' USING JAR 'hdfs:///path/to/MedianUDF.jar';
```
2. 接下来,定义一个MedianUDF类,实现evaluate方法来计算中位数:
```
package com.example.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class MedianUDF extends UDF {
public Double evaluate(final Text str) {
if (str == null) {
return null;
}
String[] strings = str.toString().split(",");
int[] array = new int[strings.length];
for (int i = 0; i < strings.length; i++) {
array[i] = Integer.parseInt(strings[i]);
}
Arrays.sort(array);
int middle = array.length / 2;
if (array.length % 2 == 0) {
return (array[middle - 1] + array[middle]) / 2.0;
} else {
return array[middle];
}
}
}
```
3. 将代码打包成jar文件,上传到HDFS上,并将路径添加到Hive的classpath中:
```
ADD JAR hdfs:///path/to/MedianUDF.jar;
```
4. 使用创建的UDF函数来计算中位数:
```
SELECT median(col1) FROM my_table;
```
用Python写一个计算中位数
以下是使用Python编写计算中位数的示例代码:
```python
def median(numbers):
"""
计算一个列表的中位数
:param numbers: 输入的列表
:return: 中位数
"""
n = len(numbers)
if n < 1:
return None
if n % 2 == 1:
return sorted(numbers)[n // 2]
else:
return sum(sorted(numbers)[n // 2 - 1:n // 2 + 1]) / 2.0
```
该函数接受一个列表作为参数,计算这个列表的中位数并返回。如果列表为空,则返回None。如果列表长度为奇数,则返回中间的元素。如果列表长度为偶数,则返回中间两个元素的平均值。该函数使用Python内置的sorted函数对列表进行排序,然后根据列表长度的奇偶性来计算中位数。