【问题标题】:Bernoulli distribution in Python/ScipyPython/Scipy 中的伯努利分布
【发布时间】:2015-06-18 15:42:20
【问题描述】:

我正在尝试使用伯努利分布生成一个矩阵,其中每个行单元格的概率为 line_id/total_lines1.0

这是我的代码:

from scipy.stats import bernoulli
import numpy

img_size = 100
img_number = 100

res = numpy.zeros((img_number+1, 6))

image_files = []
for i in range(1):
    image_base = Dt.Data(xd=img_size, yd=img_size)
    for p in numpy.arange(0.0, 1.0, 1.0/img_size):
        s = bernoulli.rvs(p, size=img_size)
        image_base.data[int(p * img_size), ...] = s
        if not s.any() == True:
            print int(p * img_size), s
    if i == 0:
        Dv.DataVisualization.plot_data(image_base, 'bin'+str(i))
    image_files.append(image_base)

from PIL import Image

def plot_data(data, file_path):
    output = Image.fromarray(numpy.uint8(data.data * 255))
    output.save(file_path + '.png', 'PNG')

但是,对于生成的每个图像,我都会得到一条线(不是第一条线),用零填充。这是最奇怪的:

这个:

if not s.any() == True:
    print int(p * img_size), s

只打印第一行。但是,我仍然可以在所有图像中看到三行(总是相同的行)被 0 满足。

【问题讨论】:

  • 我认为你得到了两条这样的线。
  • 是的,第一个(正确)和另一个,可能是正确的,但奇怪的是这发生在所有图像的同一行。
  • 如果包括第一行,则为三行。第二个距离顶部大约 1/4,第三个距离顶部大约 1/2。
  • 尝试使用更小的图像尺寸,例如3 x 3 或 4 x 4
  • 对于较小的图像,结果似乎很好。但是, s.all() == 0 似乎仍然会导致 s.any() == 0。

标签: python scipy bernoulli-probability


【解决方案1】:

我认为您可能误用了 Numpy 的 all()any()。表达式 s.any() 的计算结果为布尔值。

如果我想确定我是否有一个元素全为零的 Numpy 数组,我应该检查条件not s.any() == True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    相关资源
    最近更新 更多