我有一个表,其中包含一本书,然后包含该书的多个价格(这是一个高度简化的示例):
身份证价格 1 本书1 10 2 书 1 15 3 书 1 12 4 书2 8 5 书2 2
我很容易计算平均值,但是一定有一个很好的方法来计算中位数吗?
当前SQL:
SELECT DISTINCTROW Books.BOOK, Avg(Books.PRICE) AS [Avg Of PRICE]
FROM Books
GROUP BY Books.BOOK;
Run Code Online (Sandbox Code Playgroud)
结果:
预订平均价格 书1 12.3333333333333 书2 5
我在 CUDA 中实现了一个 2D 中值滤波器,整个程序如下所示。
#include "cuda_runtime.h"
#include "cuda_runtime_api.h"
#include "device_launch_parameters.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <windows.h>
#include <io.h>
#include <stdio.h>
#include<conio.h>
#include <cstdlib>
#include "cstdlib"
#include <process.h>
#include <stdlib.h>
#include <malloc.h>
#include <ctime>
using namespace std;
#define MEDIAN_DIMENSION 3 // For matrix of 3 x 3. We can Use 5 x 5 , 7 x 7 , 9 x 9......
#define MEDIAN_LENGTH 9 // Shoul be MEDIAN_DIMENSION x MEDIAN_DIMENSION = 3 x 3
#define BLOCK_WIDTH 16 // …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个基本数据库(附图)数据库,我试图找到以下内容:
“每个用户在每个日历月中花费的总金额中位数”
我尝试了以下操作,但出现错误:
SELECT
user_id,
AVG(total_per_user)
FROM (SELECT user_id,
ROW_NUMBER() over (ORDER BY total_per_user DESC) AS desc_total,
ROW_NUMBER() over (ORDER BY total_per_user ASC) AS asc_total
FROM (SELECT EXTRACT(MONTH FROM created_at) AS calendar_month,
user_id,
SUM(amount) AS total_per_user
FROM transactions
GROUP BY calendar_month, user_id) AS total_amount
ORDER BY user_id) AS a
WHERE asc_total IN (desc_total, desc_total+1, desc_total-1)
GROUP BY user_id
;
Run Code Online (Sandbox Code Playgroud) 我注意到boxplot的中位数(使用受限制的ylim参数构建)可能与中位数() - 函数或没有调整y轴的boxplot获得的中位数不同.
是否意味着箱图仅用于计算位于y轴定义区间内的值?如果是这样,我怎么能得到正确的箱形图(基于所有值),但是在y.axis的特定间隔上绘制它?
非常感谢你.
因此,在平衡KD树时,您应该找到中位数,然后将所有较少的元素放在左子树上,而将更大的元素放在右侧.但是如果你有多个与中位数具有相同价值的元素,会发生什么?他们是左边的子树,右边还是丢弃它们?
我问,因为我尝试过多次操作,它会影响我最近邻搜索算法的结果,并且在某些情况下,树的给定部分的所有元素都将具有完全相同的值,因此我不这样做知道在这种情况下如何拆分它们.
我尝试使用python程序进行中值滤波.我收到了这篇文章http://www.programming-techniques.com/2013/02/median-filter-using-c-and-opencv-image.html,所以我尝试将该代码翻译成python代码.
这是python中的代码
from cv2 import * #Import functions from OpenCV
import cv2
if __name__ == '__main__':
source = cv2.imread("Medianfilterp.png", CV_LOAD_IMAGE_GRAYSCALE)
final = source[:]
for y in range(len(source)):
for x in range(y):
final[y,x]=source[y,x]
members=[source[0,0]]*9
for y in range(1,len(source)-1):
for x in range(1,y-1):
members[0] = source[y-1,x-1]
members[1] = source[y,x-1]
members[2] = source[y+1,x-1]
members[3] = source[y-1,x]
members[4] = source[y,x]
members[5] = source[y+1,x]
members[6] = source[y-1,x+1]
members[7] = source[y,x+1]
members[8] = source[y+1,x+1]
members.sort()
final[y,x]=members[4]
cv.NamedWindow('Source_Picture', cv.CV_WINDOW_AUTOSIZE)
cv.NamedWindow('Final_Picture', cv.CV_WINDOW_AUTOSIZE)
cv2.imshow('Source_Picture', source) #Show the …Run Code Online (Sandbox Code Playgroud) 找到给定的一组n个数的中值的方法是将它们分配到2个堆中.1是包含较低n/2(ceil(n/2))数的最大堆和包含其余数的最小堆.如果以这种方式维护,则中位数是第一个堆的最大值(如果n是偶数,则与第二个堆的最小值一起).这是我的c ++代码,它执行此操作:
priority_queue<int, vector<int> > left;
priority_queue<int,vector<int>, greater<int> > right;
cin>>n; //n= number of items
for (int i=0;i<n;i++) {
cin>>a;
if (left.empty())
left.push(a);
else if (left.size()<=right.size()) {
if (a<=right.top())
left.push(a);
else {
left.push(right.top());
right.pop();
right.push(a);
}
}
else {
if (a>=left.top())
right.push(a);
else {
right.push(left.top());
left.pop();
left.push(a);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们知道 heapify操作具有线性复杂性.这是否意味着如果我们将数字一个接一个地插入到上面的代码中的两个堆中,我们发现线性时间的中位数?
我seaborn.lineplot()用来创建这样的折线图(代表均值的线,由代表std的带包围):
sns.lineplot(x="trial", y="rvalues", hue="subject", err_style="band", ci='sd', data=df)
Run Code Online (Sandbox Code Playgroud)
我唯一的问题是,由于我的数据不是高斯数据,因此我更关心中位数而不是均值。在Seaborn中该怎么做?
还是有类似的工具可以?我知道我可以在matplotlib中从头开始做,但是要使它变得如此好,需要大量的工作。