【问题标题】:Uniform Random Numbers统一随机数
【发布时间】:2013-05-17 07:59:58
【问题描述】:

我试图了解这段代码的作用。我正在浏览一些关于 numpy 和绘图的示例,但我无法弄清楚 uv 是什么。我知道u 是一个由两个数组组成的数组,每个数组的大小为 10000。v=u.max(axis=0) 是做什么的? max 函数是否被调用为标准 python 库的一部分?当我绘制直方图时,我得到一个由 2x 定义的 pdf,而不是正态均匀分布。

import numpy as np
import numpy.random as rand
import matplotlib.pyplot as plt

np.random.seed(123)
u=rand.uniform(0,1,[2,10000])
v=u.max(axis=0)
plt.figure()
plt.hist(v,100,normed=1,color='blue')
plt.ylim([0,2])
plt.show()

【问题讨论】:

    标签: python numpy matplotlib


    【解决方案1】:

    u.max(),或等效的 np.max(u),将为您提供数组中的 最大值 - 即单个值。它是这里的 Numpy 函数,而不是标准库的一部分。您通常希望找到沿特定轴/维度的最大值,这就是这里发生的事情。

    U 的形状为 (2,10000)u.max(axis=0) 为您提供沿 0 轴的最大值,返回一个形状为 (10000,) 的数组。如果你做了u.max(axis=1),你会得到一个形状为(2,)的数组。

    简单插图/示例:

    >>> a = np.array([[1,2],[3,4]])
    >>> a
    array([[1, 2],
           [3, 4]])
    >>> a.max(axis=0)
    array([3, 4])
    >>> a.max(axis=1)
    array([2, 4])
    >>> a.max()
    4
    

    【讨论】:

    • 我仍然对axis = 0 和axis = 1 的几何含义感到困惑。在您的示例中,为什么 a.max(axis=0) = array([3,4])?
    • 将其视为选择“沿列的最大值”与“沿列的最大值”(axis=1)
    • axis =0 是沿行的最大值吗?
    • @lord12 - a.max(axis=0) 是每一列的最大值,而a.max(axis=1) 是每一行的最大值。
    【解决方案2】:

    您在不同模块中加载的前三行(其余代码中依赖的库)。你加载 numpy 这是一个数值库,numpy.random 这是一个在创建随机数方面做了大量工作的库,matplotlib 允许绘制函数。

    其余的在这里描述:

    np.random.seed(123)

    计算机不会真正生成随机数,而是从一长串数字中选择一个数字(更正确地解释这是如何完成的http://en.wikipedia.org/wiki/Random_number_generation)。本质上,如果您想使用相同的随机数复制作品,计算机需要知道在此数字列表中的哪个位置开始选择数字。这就是这行代码的作用。如果其他人现在运行相同的代码,您最终会得到相同的“随机”数字。

    u=rand.uniform(0,1,[2,10000])

    这会生成 10000 个随机数两次,分布在 0 和 1 之间。这是均匀分布,因此它同样可能得到 0 和 1 之间的任何点。(再次可以在此处找到更多信息:http://en.wikipedia.org/wiki/Uniform_distribution_(continuous))。您正在一个数组中创建两个数组。这可以通过以下方式进行检查:len(u)len(u[0])

    v=u.max(axis=0)

    iPython 中的u.max? 命令将您引向文档。它基本上是选择一个最大值,轴确定如何选择最大值。请尝试以下操作:

    a = np.arange(4).reshape((2,2))
    np.amax(a, axis=0) # gives array([2, 3])
    np.amax(a, axis=1) # gives array([1, 3])
    

    其余代码用于设置直方图。直方图中总共有 100 个 bin,条形图将显示为蓝色。直方图 y 轴上的最大高度为 2,normed 将保证每个 bin 中至少有一个样本。

    我无法清楚地说明代码的真正目的或应用是什么。但这本质上就是它正在做的事情。

    【讨论】:

      猜你喜欢
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多