【问题标题】:Random number pull from array MATLAB Poisson从数组 MATLAB Poisson 中提取随机数
【发布时间】:2019-02-21 10:31:34
【问题描述】:

这在 MATLAB 中曾经很简单,但在 Python 中仍然如此。我有一组 Lambda,我希望生成泊松分布的随机数以插入直方图中。

lambda = [0.1 0.4]

我以前可以放在那里:

n = poissrnd(a,10)

并为每个 lambda 返回一个 10 行 x 2 列随机生成的泊松数的数组(每列代表来自每个 lambda 的 10 个样本)。出于某种原因,这种情况发生了变化——我不知道为什么。

在 Python 中 - 这仍然可以通过输入:

n = np.random.poisson(lambda, [10,2])

我一直在用头撞桌子 - 任何帮助将不胜感激......

【问题讨论】:

  • 欢迎来到本站!我假设你的意思是lambda = [0.1 0.4]; n = poissrnd(lambda, 10)。出于好奇,在哪个 Matlab 版本中可以做到这一点?
  • 对不起 - 是的。你是对的。 n = poissrnd(拉姆达,10)。 R2017b

标签: python matlab random poisson


【解决方案1】:

N = 10;
lambda = [0.1 0.4];
  • 无循环:来自documentation

    R = poissrnd(lambda) 从平均参数为lambda 的泊松分布生成随机数。 lambda 可以是向量、矩阵或多维数组。 R 的大小就是lambda 的大小。

    所以:

    result = poissrnd(repmat(lambda, N, 1));
    
  • 使用for 循环:

    result = NaN(N, numel(lambda)); % preallocate
    for k = 1:numel(lambda)
        result(:,k) = poissrnd(lambda(k), [N 1]);
    end
    
  • arrayfun:

    result = cell2mat(arrayfun(@(x) poissrnd(x, [N 1]), lambda, 'uniformoutput', false));
    

【讨论】:

  • 谢谢。 for 循环的问题是我有一个 3D 数组,其中包含我从中绘制的不同 lambda。假设矩阵是 4 x 4 x 1000。如果我想对该体素进行 10e3 次采样,那么使用 for 循环非常耗时。我宁愿只拉一个 1 x 1 x 1000 的向量,挤压它,然后在一个函数调用中对其采样 10e3 次。然后再运行四个循环 15 次(对于 4 x 4)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
  • 2011-01-27
相关资源
最近更新 更多