有谁知道c ++中16位(无符号短)数组的快速中值滤波算法?
这个似乎很有希望,但它似乎只适用于字节数组.有谁知道如何修改它以使用短裤或替代算法?
我有一个1维数据集,其中一些没有数据值设置为9999.这是一个提取,因为它很长:
this_array = [ 4, 4, 1, 9999, 9999, 9999, -5, -4, ... ]
Run Code Online (Sandbox Code Playgroud)
我想用任何一侧最接近的值的平均值替换无数据值,但是由于有些数据值没有最接近的值也没有数据值,因此替换它们有点困难.即我希望三个没有数据值被-2替换.我创建了一个循环来遍历数组中的每个标量并测试没有数据:
for k in this_array:
if k == 9999:
temp = np.where(k == 9999, (abs(this_array[k-1]-this_array[k+1])/2), this_array[k])
else:
pass
this_array[k] = temp
Run Code Online (Sandbox Code Playgroud)
但是我需要添加一个if函数或方法来获取k-1之前或k + 1之后的值,如果它也等于9999,例如:
if np.logical_or(k+1 == 9999, k-1 == 9999):
temp = np.where(k == 9999, (abs(this_array[k-2]-this_array[k+2])/2), this_array[k])
Run Code Online (Sandbox Code Playgroud)
可以看出,这个代码变得混乱,因为最终可能会得到错误的值或者最后加载嵌套的if函数.有没有人知道一种更简洁的方法来实现它,因为它在整个数据集中变化很大?
根据要求:如果第一个和/或最后一个点不是数据,则最好用最近的数据点替换它们.
我有一个脚本,它计算所有表数据的中值:
SELECT avg(t1.price) as median_val FROM (
SELECT @rownum:=@rownum+1 as `row_number`, d.price
FROM mediana d, (SELECT @rownum:=0) r
WHERE 1
ORDER BY d.price
) as t1,
(
SELECT count(*) as total_rows
FROM mediana d
WHERE 1
) as t2
AND t1.row_number>=total_rows/2 and t1.row_number<=total_rows/2+1;
Run Code Online (Sandbox Code Playgroud)
现在我需要得到不是所有表值的中值,而是按日期分组.可能吗?http://sqlfiddle.com/#!2/7cf27 - 结果我将得到2013-03-06 - 1.5,2013-03-05 - 3.5.
例如,给定N个元素的无序列表,找到子范围0..100,25..200,400..1000,10..500的中位数......我没有看到比通过每个元素更好的方法子范围并运行标准中位数查找算法.
一个简单的例子:[5 3 6 2 4] 0..3的中位数是5.(不是4,因为我们询问原始列表的前三个元素的中位数)
我有一组相互不同的元素(x_1,x_2,...,x_n).每个元素都有一个正值(w_1,w_2,...,w_n).这些正值的总和为1.

我必须找到一个Optimal元素(x_k),它是:
和

我发现这个算法:
proc OptimalElement(arr[])
prevs_w := 0
nexts_w := 0
for (i = 0; i <= n; i++)
{
wi := arr[i].w
nexts_w := 1 - prevs_w - wi
IF (prevs_w < 0,5 && nexts_w <= 0,5) THEN
return arr[i]
ELSE
prevs_w := prevs_w + wi
ENDIF
}
end
Run Code Online (Sandbox Code Playgroud)
但是该算法仅比较索引为i <k且i> k的项的总和.但我需要算法来计算x_i <x_k和x_i> x_k的项目总和.
算法应该有O(n)时间.你知道怎么解决吗?Thx提示.
输入示例:
x_i | 1; 4; 2; 3; 5
w_i | 0,1; 0,2; 0,3; 0,2; 0,2
我使用下面的查询来查找每个扇区的中位数
SELECT DISTINCT Sector,
PERCENTILE_DISC(0.5) WITHIN
GROUP (ORDER BY Value) OVER (PARTITION BY sector) AS Median
FROM TABLE
Run Code Online (Sandbox Code Playgroud)
该表格式如下
Sector Date Value
A 2014-08-01 1
B 2014-08-01 5
C 2014-08-01 7
A 2014-08-02 6
B 2014-08-02 5
C 2014-08-02 4
A 2014-08-03 3
B 2014-08-03 9
C 2014-08-03 6
A 2014-08-04 5
B 2014-08-04 8
C 2014-08-04 9
A 2014-08-05 5
B 2014-08-05 7
C 2014-08-05 2
Run Code Online (Sandbox Code Playgroud)
所以我得到了预期的结果如下
Sector Median
A 5
B 7
C 6
Run Code Online (Sandbox Code Playgroud)
现在我需要更改流程,以便计算中位数,同时仅考虑到给定日期的记录.所以新的结果将是
Sector Date Value …Run Code Online (Sandbox Code Playgroud) 编写T ComputeMedian() const在O(n)时间内计算树中值的函数的实现.假设树是BST但不一定是平衡的.回想一下n个数的中值定义如下:如果n是奇数,则中值是x,使得小于x的值的数量等于大于x的值的数量.如果n是偶数,则一加上小于x的值的数量等于大于x的值的数量.例如,给定数字8,7,2,5,9,中位数为7,因为有两个小于7的值和两个大于7的值.如果我们将3加到集合中,则中位数变为5.
这是二叉搜索树节点的类:
template <class T>
class BSTNode
{
public:
BSTNode(T& val, BSTNode* left, BSTNode* right);
~BSTNode();
T GetVal();
BSTNode* GetLeft();
BSTNode* GetRight();
private:
T val;
BSTNode* left;
BSTNode* right;
BSTNode* parent; //ONLY INSERT IS READY TO UPDATE THIS MEMBER DATA
int depth, height;
friend class BST<T>;
};
Run Code Online (Sandbox Code Playgroud)
二进制搜索树类:
template <class T>
class BST
{
public:
BST();
~BST();
bool Search(T& val);
bool Search(T& val, BSTNode<T>* node);
void Insert(T& val);
bool DeleteNode(T& val);
void BFT(void);
void PreorderDFT(void);
void …Run Code Online (Sandbox Code Playgroud) 在Python列表中顺序查找行的均值和中位数的最有效方法是什么?
例如,我的清单:
input_list = [1,2,4,6,7,8]
Run Code Online (Sandbox Code Playgroud)
我想生成一个包含以下内容的输出列表:
output_list_mean = [1,1.5,2.3,3.25,4,4.7]
output_list_median = [1,1.5,2.0,3.0,4.0,5.0]
Run Code Online (Sandbox Code Playgroud)
平均值计算如下:
中位数计算如下:
我试图用以下循环实现它,但它似乎非常低效.
import numpy
input_list = [1,2,4,6,7,8]
for item in range(1,len(input_list)+1):
print(numpy.mean(input_list[:item]))
print(numpy.median(input_list[:item]))
Run Code Online (Sandbox Code Playgroud) 我需要获得分组中位数
我已经对表单的数据进行了分组
From type Weight
A person-person 4
A person-person 3
A person-organization 11
A person-person 5
A person-organization 6
B person-person 2
B person-organization 3
B person-organization 7
C person-person 5
C person-person 2
C person-organization 15
S person-organization 7
S person-person 4
S person-person 3
Run Code Online (Sandbox Code Playgroud)
我需要获取按列 A 分组的中位数,其中列 B = '人-人'
A value1
B value2
C value3
S value4
Run Code Online (Sandbox Code Playgroud)
我可以用以下方法对平均值执行此操作:
=QUERY(Connections!A:C,"Select A, Avg(C) where B='person-person' and C is not null group by A",1)
Run Code Online (Sandbox Code Playgroud)
我尝试过使用该Median函数,但无法将其按 A 列分组 …
使用种子为 4020 的 PRNG(前 3 个数字为 -2123524894 961034805 1071375651)生成 10^10 整数。打印生成的数字中第 10^5 大的元素。
当然,如果问题规模较小,我本来可以点击一下解决它,但我不知道如何解决它。一种方法是使用堆方法(BAD IDEA)来使用中位数,然后尝试将输入分成块并尝试在其中找到它,但这些方法都不起作用。我认为我陷入了错误的事情,这个问题的解决方案不可能需要超级计算机来计算,所以我的想法当然是错误的,你能帮我指出正确的方向,告诉我可以做什么来解决这个问题?