🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

870閲覧

uniform関数の使い方とplotの動作について

gjgjgjgjg

総合スコア14

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/12/22 12:30

下の4行目のnp.random.uniform(0.0, 1.0, (N,2))と記載されていますが、
(N,2)という部分で0から1までの一様乱数を2組み作っていることはわかるのですが、
(N,2)という書き方が公式のuniformドキュメントに記載されていませんでした。
これはどのように考えれば良いでしょうか?

また6行目のX[:,0][norm < 1]の部分でXの1つ目の乱数を対象にしnormが1以下の数字を対象にしているのですが、
内部的にはXとnormの同じオフセットの数字を抜き出して、normが<1ならばXを抽出するという動作を行なっているのでしょうか?
ここら辺の動作はどのように理解すれば良いでしょうか?

python

1import numpy as np 2import matplotlib.pyplot as plt 3N = 10000 4X = np.random.uniform(0.0, 1.0, (N,2)) 5norm = np.linalg.norm(X, ord=2, axis=1) 6plt.plot(X[:,0][norm < 1],X[:,1][norm < 1], 'o') 7plt.plot(X[:,0][norm >= 1],X[:,1][norm >= 1], 'o') 8plt.title('estimated_pi:{0}'.format(np.count_nonzero([norm < 1])/N*4))

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

(N,2)という部分で0から1までの一様乱数を2組み作っていることはわかるのですが、

(N,2)という書き方が公式のuniformドキュメントに記載されていませんでした。
これはどのように考えれば良いでしょうか?

第三引数sizeに対して指定しており、得られる配列の形状を決定しています。[0, 1)の区間の一様乱数で満たされた(N, 2)というshapeの配列が得られることになります。

numpy.random.Generator.uniform — NumPy v1.17 Manual

numpyのshapeの概念についてはこちらなどの解説を参照(検索すると解説はたくさん出ます)。
NumPyのndarrayのインスタンス変数shapeの意味 - DeepAge


また6行目のX[:,0][norm < 1]の部分でXの1つ目の乱数を対象にしnormが1以下の数字を対象にしているのですが、

内部的にはXとnormの同じオフセットの数字を抜き出して、normが<1ならばXを抽出するという動作を行なっているのでしょうか?

X[:,0]shape(N, )の配列になります(0列目を抜き出したことに相当)。また、norm < 1normと同じshapeのboolean array(ブール値の配列)になります。今回normの配列はX[:,0]shapeと等しいので、そのままこの条件に合致する要素が抜き出された配列が得られます。

ちゃんと理解するにはnumpyの仕様についての理解が必要だと思うので、一度マニュアルに目を通してみてください。

Indexing — NumPy v1.17 Manual

投稿2019/12/22 13:34

hayataka2049

総合スコア30935

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問