2

私はこのコードが何をするのかを理解しようとしています。私はnumpyとプロットについていくつかの例を調べていますが、何が何であるかuを理解できませんvuそれぞれサイズが10000の2つの配列の配列です。どう すれv=u.max(axis=0)ばよいですか。max呼び出されている関数は標準のPythonライブラリの一部ですか?ヒストグラムをプロットすると、通常の一様分布ではなく、2倍で定義された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

異なるモジュール (コードの残りの部分で依存するライブラリ) にロードする最初の 3 行。これは、乱数を作成するために多くの優れた作業を行い、関数のプロットを可能にするライブラリnumpyである数値ライブラリです。numpy.randommatplotlib

残りはここで説明されています:

np.random.seed(123)

コンピュータは実際に乱数を生成するのではなく、長い数のリストから数を選択します (これがどのように行われるかについてのより正確な説明についてはhttp://en.wikipedia.org/wiki/Random_number_generation )。本質的に、同じ乱数で作業を再現したい場合、コンピューターはこの数字のリストのどこから数字の選択を開始するかを知る必要があります。これが、このコード行が行うことです。他の誰かが同じコードを実行すると、同じ「乱数」が得られます。

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

これにより、10000 個の乱数が 2 回生成され、0 と 1 の間に分散されます。これは一様な分散であるため、0 と 1 の間の任意のポイントを取得する可能性は等しくなります。 /wiki/Uniform_distribution_(continuous) )。配列内に 2 つの配列を作成しています。これは、次を実行することで確認でき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 個のビンがあり、バーは青色になります。ヒストグラムの y 軸の最大の高さは 2 であり、正規化により、すべてのビンに少なくとも 1 つのサンプルが含まれることが保証されます。

コードの本当の目的や用途が何であったかを明確に理解することはできません。しかし、これは本質的にそれが行っていることです。

于 2013-03-05T02:09:17.387 に答える
3

u.max()、または同等に、配列内最大値、つまり単一の値np.max(u)が得られます。ここでは Numpy 関数であり、標準ライブラリの一部ではありません。特定の軸/次元に沿って最大値を見つけたいことがよくありますが、それがここで起こっていることです。

U は shape(2,10000)を持ちu.max(axis=0)、軸に沿って最大値を与え、0shape の配列を返し(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 に答える