我有一个简单的计算二项分布的函数
CREATE OR REPLACE FUNCTION random_binomial(n int, p float)
RETURNS int AS $$
DECLARE
-- Loop variable
i int;
-- Result of the function
result float = 0;
BEGIN
IF n <= 0 OR p <= 0.0 OR p >= 1.0 THEN
RETURN NULL;
END IF;
FOR i IN 1..n LOOP
IF random() < p THEN
result = result + 1;
END IF;
END LOOP;
RETURN result;
END;
$$ LANGUAGE plpgsql STRICT;
在做模拟的时候,我需要调用这个函数上千次,这使得这个过程相当慢。在PostgreSQL中有没有更聪明的方法来计算二项分布?
2条答案
按热度按时间ct3nt3jp1#
PostgreSQL允许编写C函数,这些函数可以很容易地集成到您的应用程序中(当然,假设您知道用C编写代码):它应该比PL/PGSQL快。
请参阅详细文档:https://www.postgresql.org/docs/current/xfunc-c.html
jmp7cifd2#
请尝试以下方法:
1.为创建具有下限和上限的框
1.从表的所需列开始计数,并将每个计数放入收集箱中
1.在执行此操作时,请确保在连接时保留bin的所有数据(下限和上限)(bin的某些值的计数可以为
NULL
,但反之则不行)。