Loading [MathJax]/extensions/tex2jax.js

Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Python

Pythonでランダムな座標データを生成する方法

投稿日:2022年9月6日 更新日:

 

<目次>

(1) Pythonでランダムな座標データを生成する方法
 (1-1) 使う構文
 (1-2) サンプルプログラム
 (1-3) 補足:データの座標を全体的にシフトしたい場合

(1) Pythonでランダムな座標データを生成する方法

タイトルの通り、Pythonでランダムな座標データを生成する方法をご紹介します。前提として、今回ご紹介する方法は「numpy」という数値計算を得意とするライブラリを使います。

(1-1) 使う構文

●構文①:numpy.random.RandomState

(構文)
  1. rng = np.random.RandomState(seed)
(説明)
擬似乱数を生成するためのRandomstateインスタンスを生成します。引数seedを与える事で、ランダム状態を保持して、毎回一貫して同じ値を取得する事ができます(≒疑似乱数ジェネレーター=random number generatorの初期化処理)。
→今回は引数に「123」を与え、毎回同じランダムデータで検証できるように、1パターンに固定。

●構文②:numpy.random.RandomState.randn(d0,d1,…,dn)

(構文)
  1. x1 = rng.randn(d0,d1,…,dn)
(説明)
・概要:標準正規分布(standard normal distribution)から、1つ以上のランダムデータのサンプルを返す。
・引数:d0, d1, …, dnはサンプルデータの次元。N個指定すればN次元の配列(d0, d1, …, dnの形)を生成。指定した数の分だけ、その次元でデータ数が生成される。
・戻り値:N次元の配列を生成します。配列にはランダムデータが格納され、平均(mean)=0、分散(variance)=1のガウス分布のデータになっています。

●補足:randnは数学的にはどんなデータなの?

・一言で言うと、(図100)ような正規分布(ガウス分布)のグラフから、ランダムで値を生成します。
(図100)正規分布
・正規分布の密度関数は次のように表されます。
(図101)
※この時、μ=平均、σ=標準偏差
・この中でもrandn関数で出る「標準正規分布」は平均=0(μ=0)、標準偏差=1(σ=1)です。
(図102)
・つまり、式としては次のように簡素化できます。
(図103)

・よって、データの約68%は±1の範囲に入る、約95%は±2の範囲に入るといった形のデータになります。
(図104)

(1-2) サンプルプログラム

・2次元の例をご紹介します(d0,d1を指定)。
(サンプル①)
  1. import numpy as np
  2.  
  3. def main():
  4. rng = np.random.RandomState(123)
  5. # 2次元=d0,d1を指定
  6. x1 = rng.randn(5,2)
  7. print(x1)
  8.  
  9. if __name__ == "__main__":
  10. main()
(実行例①)
  1. [[-1.0856306 0.99734545]
  2. [ 0.2829785 -1.50629471]
  3. [-0.57860025 1.65143654]
  4. [-2.42667924 -0.42891263]
  5. [ 1.26593626 -0.8667404 ]
  6. [-0.67888615 -0.09470897]
  7. [ 1.49138963 -0.638902 ]
  8. [-0.44398196 -0.43435128]
  9. [ 2.20593008 2.18678609]
  10. [ 1.0040539 0.3861864 ]]
(図121)
→固定しているので、何回実行しても同じランダム座標の組合せになります。
・3次元の例をご紹介します(d0,d1,d2を指定)。
(サンプル②)
  1. import numpy as np
  2.  
  3. def main():
  4. rng = np.random.RandomState(123)
  5. # 3次元=d0,d1,d2を指定
  6. x1 = rng.randn(10,2,2)
  7. print(x1)
  8.  
  9. if __name__ == "__main__":
  10. main()
(実行例②)
  1. [[[-1.0856306 0.99734545]
  2. [ 0.2829785 -1.50629471]]
  3.  
  4. [[-0.57860025 1.65143654]
  5. [-2.42667924 -0.42891263]]
  6.  
  7. [[ 1.26593626 -0.8667404 ]
  8. [-0.67888615 -0.09470897]]
  9.  
  10. [[ 1.49138963 -0.638902 ]
  11. [-0.44398196 -0.43435128]]
  12.  
  13. [[ 2.20593008 2.18678609]
  14. [ 1.0040539 0.3861864 ]]
  15.  
  16. [[ 0.73736858 1.49073203]
  17. [-0.93583387 1.17582904]]
  18.  
  19. [[-1.25388067 -0.6377515 ]
  20. [ 0.9071052 -1.4286807 ]]
  21.  
  22. [[-0.14006872 -0.8617549 ]
  23. [-0.25561937 -2.79858911]]
  24.  
  25. [[-1.7715331 -0.69987723]
  26. [ 0.92746243 -0.17363568]]
  27.  
  28. [[ 0.00284592 0.68822271]
  29. [-0.87953634 0.28362732]]]

(図122)

目次にもどる

(1-3) 補足:データの座標を全体的にシフトしたい場合

次のような形でnp.array([N,N])を加算する事で、各データを(N,N)だけシフトできます。
 
(サンプル)
  1. import numpy as np
  2.  
  3. def main():
  4.  
  5. rng = np.random.RandomState(123)
  6. x1 = rng.randn(10,2) + np.array([5,5])
  7. print(x1)
  8.  
  9. if __name__ == "__main__":
  10. main()
(結果例)
  1. [[3.9143694 5.99734545]
  2. [5.2829785 3.49370529]
  3. [4.42139975 6.65143654]
  4. [2.57332076 4.57108737]
  5. [6.26593626 4.1332596 ]
  6. [4.32111385 4.90529103]
  7. [6.49138963 4.361098 ]
  8. [4.55601804 4.56564872]
  9. [7.20593008 7.18678609]
  10. [6.0040539 5.3861864 ]]
 
(図131)

Adsense審査用広告コード


Adsense審査用広告コード


-Python

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

CondaHTTPError: HTTP 000 CONNECTION FAILED for url XXXXエラーの対処方法

  <目次> (1) CondaHTTPError: HTTP 000 CONNECTION FAILED for url XXXXエラーの対処方法  (1-1) 事象概要とエラーメッセージ …

PythonにOpenCVを導入して画像を読込み&表示&拡大縮小してみる

(0)目次&概説 (1) OpenCVとは (2) OpenCVのインストール  (2-1) インストール資源の入手  (2-2) インストール時の注意事項  (2-3) インストールの実行 (3) …

Pythonのvenvの使い方(基礎編)をご紹介

  <目次> (1) Pythonのvenvの使い方(基礎編)をご紹介  (1-1) venvとは?  (1-2) STEP1:仮想環境(venv)の作成  (1-3) STEP2:仮想環境 …

多クラスのロジスティック回帰をKerasで実装した例をご紹介

  <目次> 多クラスのロジスティック回帰をKerasで実装した例をご紹介  (1-1) 実装のフローとポイント   ●STEP1:モデルの定義   ●STEP2:誤差関数の定義   ●ST …

PythonでSQLAlchemyを使ってOracleDBに接続する際に遭遇したエラーとその対処方法

本記事は次の記事の続編です。 (下記記事の手順を実行する際に遭遇したエラーについての備忘録) PythonでSQLAlchemyを使ってOracleDBに接続する方法 (0) 目次 (4) エラー対応 …

  • English (United States)
  • 日本語
S