2

我试图了解这段代码的作用。我正在浏览一些关于 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()
4

2 回答 2

3

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

U 具有 shape (2,10000),并u.max(axis=0)为您提供沿0轴的最大值,返回一个具有 shape 的数组(10000,)。如果你这样做了u.max(axis=1),你会得到一个 shape 数组(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
于 2013-03-05T01:54:01.777 回答
3

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

其余的在这里描述:

np.random.seed(123)

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

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

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

v=u.max(axis=0)

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

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 中至少有一个样本。

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

于 2013-03-05T02:09:17.387 回答