我试图了解这段代码的作用。我正在讨论关于numpy和plotting的一些例子,我无法弄清楚u
和v
是什么。我知道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()
答案 0 :(得分:3)
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
答案 1 :(得分:3)
您在不同模块中加载的前三行(在其余代码中依赖的库)。你加载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个分档,条形将显示为蓝色。直方图y轴上的最大高度为2,并且标准化将保证每个箱中至少有一个样本。
我无法清楚地知道代码的真正目的或应用是什么。但这实际上是它正在做的事情。