【问题标题】:From Matlab to Python: N point with Gaussian Distribution inside a rectangle从 Matlab 到 Python:矩形内具有高斯分布的 N 点
【发布时间】:2014-05-19 19:37:10
【问题描述】:

我在 Matlab 中编写了这段代码,我正在寻找 Python 中的等效代码。有人可以帮忙吗? 代码是在一个边长LxL的矩形内生成N个点,具有高斯分布。 代码来源于此链接:gaussian_inside_rectangle

function ans = randn_rect( N, sigma, L )
ans = zeros(0,2);
while size(ans,1) < N,
   pts = sigma * randn( ceil(1.25*(N-size(ans,1))), 2 );    
   pts = pts(all(abs(pts)<L/2,2),:);
   ans = [ ans ; pts ];
end
ans = ans(1:N,:);

【问题讨论】:

  • 请修正您的代码。 “在此处输入代码”片段显然是外星人:^)
  • 对不起,我不明白你的评论?
  • 您的代码不是有效的 MATLAB 语言。插入时您可能没有清除“在此处输入代码”短语。

标签: python matlab


【解决方案1】:

所以你想从truncated normal distribution 中采样N 二维点?很高兴,scipy comes with that one built-in

这会生成一个带有随机点的 N*2 numpy 数组 points

from scipy.stats import truncnorm
import numpy as np

N = 1000
L = 5.0
mu = 4.0
sigma = 0.8

lower, upper = 0, L

X = truncnorm(
    (lower - mu) / sigma, (upper - mu) / sigma, loc=mu, scale=sigma)

points = np.reshape(X.rvs(2*N), (N, 2))

代码改编自from this answer

【讨论】:

  • 谢谢很多,我运行n = 10和l = 100的代码,我已经得到了这些点:[[3.12334787 3.75.37384664] [3.530553099] [4.530553099] [4.530553099 [4.13265268/3.64291268/3.64291268/3.6483868 3.64265268 3.64291268/3.6429126823.642912682]所有的值都是arrount 4,即使l为100 ?? span>
  • 如果您没有更改 mu,那么是的,您的值应该以 4 为中心。您发布的数组看起来不错。
  • 那么,我应该将 mu 设置为 100
  • 我的意思是这些值并没有分布在 100x100 的整个区域中。点都非常接近点(4,4)
  • 他们为什么会分布在整个地区?示例中的分布具有 0.8 的标准偏差。看来您并不真正知道什么是正态(高斯)分布。你应该先阅读一下。
猜你喜欢
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 2014-12-26
  • 2012-05-21
  • 1970-01-01
相关资源
最近更新 更多