2013-03-05 111 views
2

我想了解这段代码的作用。我正在通过一些关于numpy和plotting的例子,我无法弄清楚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() 

回答

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 
+0

我仍然困惑什么轴= 0和轴= 1意味着几何。在你的例子中,为什么a.max(axis = 0)= array([3,4])? – lord12 2013-03-05 02:06:34

+0

把它看作是选择“沿列最大值”还是“沿列最大值”(axis = 1) – YXD 2013-03-05 02:07:48

+0

axis = 0沿行最大? – lord12 2013-03-05 02:14:43

3

前三行你在不同的模块(即在代码的其余部分依赖APON库)加载。你加载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,并且规范将保证每个仓中至少有一个样本。

我不能清楚地说明代码的真正目的或应用是什么。但这是它的实质。