标签: sampling

来自DMCichlet分布的采样中来自PyMC的FloatingPointError

在使用装饰器来定义"指数随机变量的对数"的随机对象不成功之后,我决定使用手动编写这个新分布的代码pymc.stochastic_from_dist.我想在这里实现的模型(第一个模型): 在此输入图像描述

现在,当我尝试使用MCMC Metropolis和正态分布作为提议对日志(alpha)进行采样时(如下图所示,作为采样方法),我收到以下错误:

  File "/Library/Python/2.7/site-packages/pymc/distributions.py", line 980, in rdirichlet
    return (gammas[0]/gammas[0].sum())[:-1]

FloatingPointError: invalid value encountered in divide
Run Code Online (Sandbox Code Playgroud)

虽然采样不会出错的时间,但采样直方图与本文中的采样直方图相匹配.我的分层模型是:

"""
A Hierarchical Bayesian Model for Bags of Marbles

logalpha ~ logarithm of an exponential distribution with parameter lambd
beta ~ Dirichlet([black and white ball proportions]:vector of 1's)
theta ~ Dirichlet(alpha*beta(vector))

"""

import numpy as np
import pymc
from scipy.stats import expon
lambd=1.
__all__=['alpha','beta','theta','logalpha']
#------------------------------------------------------------
# Set up pyMC model: logExponential
# 1 parameter: (alpha)

def logExp_like(x,explambda): …
Run Code Online (Sandbox Code Playgroud)

python random floating-point sampling pymc

15
推荐指数
1
解决办法
600
查看次数

从NumPy阵列中随机选择单元格 - 无需替换

我在NumPy中编写了一些建模例程,需要从NumPy数组中随机选择单元格并对它们进行一些处理.必须选择所有单元而不进行替换(例如,一旦选择了单元,就不能再次选择,但必须在结束时选择所有单元).

我正在从IDL过渡,在那里我可以找到一个很好的方法来做到这一点,但我认为NumPy有一个很好的方法来做到这一点.你会建议什么?

更新:我应该说我正在尝试在2D数组上执行此操作,因此返回一组2D索引.

python random numpy shuffle sampling

13
推荐指数
2
解决办法
1万
查看次数

采样三角形中的随机点

假设你有一个顶点的三角形任意A,BC.本文(第4.2节)说,你可以通过以下顶点的凸组合P从三角形内均匀地生成一个随机点ABC:

P = (1 - sqrt(r1)) * A + (sqrt(r1) * (1 - r2)) * B + (sqrt(r1) * r2) * C
Run Code Online (Sandbox Code Playgroud)

在哪里r1r2均匀地绘制[0, 1],并且sqrt是平方根函数.

你如何证明在三角形内均匀分布的采样点ABC

编辑

正如在mathoverflow问题的评论中所指出的, Graphical Gems讨论了这种算法.

algorithm geometry numerical-methods sampling

13
推荐指数
1
解决办法
1万
查看次数

从链式哈希表中有效地选择一个随机元素?

仅仅是为了练习(而不是作业),我一直试图解决这个问题(CLRS,第3版,练习11.2-6):

假设我们在大小为m的哈希表中存储了n个密钥,通过链接解决了冲突,并且我们知道每个链的长度,包括最长链的长度L. 描述从散列表中的密钥中随机均匀地选择密钥并在预期时间O(L*(1 + m/n))中返回它的过程.

到目前为止我所想的是每个键返回的概率是1/n.如果我们试图得到一个介于1到n之间的随机值x,并尝试按顺序查找按顺序排序的第x个密钥,然后沿着存储桶中的链,那么将需要O(m)才能找到正确的存储桶通过桶一个接一个地和O(L)时间来获得链中的正确密钥.

random algorithm hashtable sampling data-structures

13
推荐指数
1
解决办法
4572
查看次数

OpenCV,如何使用点阵列来平滑和采样轮廓?

我有一个问题是在OpenCV(C++ API)中平滑和采样轮廓.假设我已经从中检索了一系列点数cv::findContours(例如应用于此图像:

在此输入图像描述

最终,我想要

  1. 使用不同的内核平滑一系列点.
  2. 使用不同类型的插值调整序列的大小.

平滑后,我希望得到如下结果:

在此输入图像描述

我还考虑在a中绘制轮廓cv::Mat,过滤Mat(使用模糊或形态学操作)并重新找到轮廓,但速度慢且次优.因此,理想情况下,我可以专门使用点序列来完成工作.

我在上面阅读了几篇帖子并天真地认为我可以简单地将一个std::vector(of cv::Point)转换为a cv::Mat然后像模糊/调整大小的OpenCV函数将为我做的工作......但他们没有.

这是我尝试过的:

int main( int argc, char** argv ){

    cv::Mat conv,ori;
    ori=cv::imread(argv[1]);
    ori.copyTo(conv);
    cv::cvtColor(ori,ori,CV_BGR2GRAY);

    std::vector<std::vector<cv::Point> > contours;
    std::vector<cv::Vec4i > hierarchy;

    cv::findContours(ori, contours,hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);

    for(int k=0;k<100;k += 2){
        cv::Mat smoothCont;

        smoothCont = cv::Mat(contours[0]);
        std::cout<<smoothCont.rows<<"\t"<<smoothCont.cols<<std::endl;
        /* Try smoothing: no modification of the array*/
//        cv::GaussianBlur(smoothCont, smoothCont, cv::Size(k+1,1),k);
        /* Try sampling: "Assertion failed (func != 0) in resize"*/
//        cv::resize(smoothCont,smoothCont,cv::Size(0,0),1,1);
        std::vector<std::vector<cv::Point> > v(1);
        smoothCont.copyTo(v[0]);
        cv::drawContours(conv,v,0,cv::Scalar(255,0,0),2,CV_AA); …
Run Code Online (Sandbox Code Playgroud)

c++ opencv contour sampling

13
推荐指数
1
解决办法
1万
查看次数

从R中的数据集中获取不成比例的样本

如果我在R中有一个大型数据集,我如何考虑原始数据的分布随机抽取数据,特别是如果数据偏斜且只有1%属于次要类并且我想采取偏见样本的数据?

random r sampling

12
推荐指数
1
解决办法
4万
查看次数

随机抽样给出一个精确的总和

我想在1000到100000之间采样140个数字,这样140个数字的总和大约是2百万(2000000):

sample(1000:100000,140)
Run Code Online (Sandbox Code Playgroud)

这样:

sum(sample(1000:100000,140)) = 2000000
Run Code Online (Sandbox Code Playgroud)

任何指针如何实现这一目标?

random r sampling

11
推荐指数
4
解决办法
852
查看次数

分析(可能是I/O绑定)进程以减少延迟

我想在更大的应用程序中改进特定方法的性能.

目标是改善延迟(在特定功能中花费的挂钟时间),而不是(必要的)系统负载.

要求:

  1. 我预计很多延迟都是由I/O引起的,考虑到等待/阻塞所花费的时间(换句话说:查看挂钟时间而不是CPU时间)
  2. 因为程序比我想要优化的片段做得更多.需要有一种方法可以以编程方式启动/停止分析,或者过滤输出以仅显示进入和退出我正在优化的功能之间的时间.
  3. 方法级别的分析是可以接受的(如果它可以在指令级别上完成,甚至更好.如果它只分析系统调用,那可能是不够的)
  4. 这是一个爱好项目,所以昂贵的工具不是一个真正的选择
  5. 仪表(-finstrument-functions)是可以接受的
  6. 我感兴趣的关键代码很难手动中断(因为它已经相对快速且难以在循环中实际调用),因此需要某种自动化.

迄今为止丢弃的工具:

  • gprof,oprofile,callgrind(要求1)
  • 使用getrusage建立自定义的东西(要求1)
  • poormansprofiler.org(要求2)
  • strace -T,dtrace,http://perf.wiki.kernel.org(要求2和3)
  • VTune,Zoom(要求4)
  • 手动调用堆栈采样(要求6)
  • google-perftools(应该能够测量墙壁时间,但这似乎不适用于我的情况,大概是因为SIGALRM干扰.
  • systemtap(我的内核没有打包包含utrace)

我尚未进一步评估的其他选项:

  • cprof(这里没有开箱即用,似乎只有i386)
  • 手动插入跟踪点(例如,使用lttng)

我很想知道:

  • 其他选择
  • 也许我太早丢弃了一些工具?
  • 我尚未评估的选项是否有可能发挥作用,如果是的话,如何做到最好.

我终于安顿下来了:

这个粗糙工具产生的痕迹很难解释,我可以很容易地想象一些工具来进一步处理它的输出,使它更加有用.但是,这对我来说现在已经完成了这项工作,所以我把这个项目放到了以后;).

linux performance trace profiling sampling

10
推荐指数
1
解决办法
3107
查看次数

如何选择常规密度的点

如何选择常规密度的点子集?更正式的,

特定

  1. 一组的不规则隔开的点,
  2. 距离度量dist(例如欧几里德距离),
  3. 和目标密度d,

如何选择满足以下条件的最小子集B

  • 每一个点X一个,
  • 存在一个点ÿ
  • 满足 dist(x,y) <= d

我目前的最佳镜头是

  • A本身开始
  • 选出最接近(或者只是特别接近)的几个点
  • 随机排除其中一个
  • 只要条件成立,就重复

并重复整个过程,以获得最好的运气.但有更好的方法吗?

我试图用280,000个18-D点来做到这一点,但我的问题是一般策略.所以我也想知道如何用二维点做到这一点.我并不需要保证最小的子集.欢迎任何有用的方法.谢谢.


自下而上的方法

  • 选择一个随机点
  • 选择未选中ymin(d(x,y) for x in selected)最大值
  • 继续!

我会把它称为自下而上和我最初自上而下发布的那个.这在开始时要快得多,所以对于稀疏采样,这应该更好吗?

性能指标

如果不要求保证最优性,我认为这两个指标可能有用:

  • 覆盖半径: max {y in unselected} min(d(x,y) for x in selected)
  • 经济半径: min {y in selected != x} min(d(x,y) for x in selected)

RC是最小允许d,并且这两者之间没有绝对的不等式.但RC <= RE更可取. …

algorithm geometry subset selection sampling

9
推荐指数
1
解决办法
697
查看次数

tensorflow中samples_softmax_loss和nce_loss有什么区别?

我注意到有两个函数关于张量流中的负采样来计算损失(sampled_softmax_lossnce_loss).这两个函数的参数类似,但我真的想知道这两个函数有什么区别?

sampling tensorflow

9
推荐指数
1
解决办法
2106
查看次数