• Skip to main content
  • Skip to secondary menu
  • Skip to primary sidebar
  • Skip to footer

AI活用エンジニアへの道

生成AI時代のエンジニアの生き方を考えるメディア(作成途中)

  • コラム
  • 生成AI
  • プログラミング
    • Python入門
    • Flask入門
    • Django入門
  • プロフィール
Home / 未分類 / numpyでmax, min, argmax, argminを用いた最大値、最小値の求め方

numpyでmax, min, argmax, argminを用いた最大値、最小値の求め方

1 numpyの簡単な作成方法、numpyからlistへの変換(np.array, np.arange, tolst)
2 0行列、1行列、単位行列(zeros, ones, eye)
3 分割して作成した配列の作成(linspace)
4 行列の形の変換(reshape)
5 行列のランダム値、正規分布(rand, randn, randint)
6 関連記事

機械学習を実装するには、行列やベクトルを扱う必要があります。行列、ベクトルだけでなく平均や標準偏差を計算することも多々あります。

しかし、、わざわざそれらをプログラムするのは非常に面倒です!

そこで、pythonではnumpyというライブラリを用います。

numpyとは、pythonでの数値計算を簡易化するために開発されたライブラリです。

このページでは、numpyについて取り上げ、具体的な使い方を見ていきます。

numpyの簡単な作成方法、numpyからlistへの変換(np.array, np.arange, tolst)

以下に簡単なnumpyの作成方法を示します。

  • pythonのlistからnumpyの行列へ(np.array, np.arange)
  • numpyの行列からpythonのlistへ(numpy.ndarray.tolist)
# numpyの初期化方法

my_list = np.array([1, 2, 3])
# 行列の作成
# class 'numpy.ndarray' array([1, 2, 3])

my_mat = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 行列の作成
# class 'numpy.ndarray' array([[1, 2, 3], [4, 5, 6], [7, 8, 9)

np.arange(0, 11, 2)
# 1つとばしの0-10までの列
# class 'numpy.ndarray' array([0, 2, 4, 6, 8, 10] )

## numpyからpythonのlistへの変換(tolist) ##
my_mat.tolist()
# [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

0行列、1行列、単位行列(zeros, ones, eye)

numpyを用いると色んな行列を簡単に作ることができます。

ここでは代表的なものとして0行列、1行列、単位行列を上げさせて頂きます。

0行列とは、値が全て0の行列です。

これには、np.zerosを用います。

1行列は、値が全て1の行列です。

これには、np.onesを用います。

単位行列とは、行と列の等しい部分は1、それ以外は0の行列です。

これには、np.eyeを用います。

↓のような行列

[1, 0, 0]
[0, 1, 0]
[0, 0, 1]

# 0行列(np.zeros), 1の行列(np.ones), 単位行列(np.eye)の実装

print(np.zeros(3))
# [0, 0, 0]

print(np.zeros((3, 3)))
# [[0, 0, 0]
# [0, 0, 0]
# [0, 0, 0]]

print(np.ones(3))
# [1, 1, 1]

print(np.ones((3, 3)))
# [[1, 1, 1]
# [1, 1, 1]
# [1, 1, 1]]

print(np.eye(3))
# [[1, 0, 0]
# [0, 1, 0]
# [0, 0, 1]]

分割して作成した配列の作成(linspace)

np.linspaceを用いるとある範囲でいくらかに分割して配列を作成することができます。

たとえば

np.linspace(0, 5, 4)とすると0 ~ 5までで4分割され以下のように出力されます

array([0. , 1.66666667, 3.33333333, 5. ])

行列の形の変換(reshape)

次に行列の形を変換する方法について記載します。
つまり、
(6, 1) の行列を (2, 3)の形にするなどです。

これをするには、reshape関数を使います。

実際に見て見ましょう

#  行列の形(行数と列数)の変更

np.arange(0,6)
# array([0, 1, 2, 3, 4, 5])


np.arange(0,6).reshape(2, 3)
# 行列の形を1行6列から2行3列に変更
#array([[0, 1, 2],
#       [3, 4, 5]])

# ちなみに行数*列数のサイズが同じでないとエラーになります。
np.arange(0,5).reshape(2, 3)
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# ValueError: cannot reshape array of size 5 into shape (2,3)

行列のランダム値、正規分布(rand, randn, randint)

次に行列のランダム値、正規分布の作成をしましょう。

これは、機械学習の際に値を初期化するのに必要になります。

ランダム値の作成には、

np.ramdom.rand(行数, 列数)を使います。これをすると0~1の範囲でのランダム値が指定した行数、列数の行列として作成されます。

正規分布に従ったランダム値の表示には、

np.random.randn(行数, 列数)とします。

すると、平均0, 分散1である標準正規分布の行列が作成されます。

最後に、整数のランダム値を生成したい場合ですが、

これには、np.random.randint(n, m, (行数, 列数))

するとn~m-1の間の整数が指定した行数と列数の行列として作成されます。

実際に例を見ましょぅ

# rand, randn, randintを用いたランダム値行列の作成

## rand #########################
np.random.rand(5)
[0.47613209 0.17554651 0.52637641 0.29382056 0.76435774]
# 1行5列の0~1までのランダム値行列

np.random.rand(5,5)
# 5行5列の0~1までのランダム値行列
# [[0.61883284 0.75824608 0.41693386 0.15827934 0.40941596]
# [0.38359948 0.60788297 0.61990985 0.79745707 0.21668662]
# [0.04532364 0.67372592 0.56545386 0.22726293 0.30243403]
# [0.13251716 0.55645034 0.41324027 0.93183949 0.24394547]
# [0.35270749 0.23896005 0.57328702 0.08253975 0.99966318]]


## randn #########################
np.random.randn(5)
# 1行5列の標準正規分布
# array([-0.27892323,  0.26257052, -0.48060383, -0.33141197,  2.51216024])

np.random.randn(3, 3)
# 3行3列の標準正規分布
# array([[-0.48518996,  0.93988438,  1.57549951],
#       [ 0.37045346,  0.83672192, -1.15928442],
#       [ 0.71979199, -1.69430231, -0.72214307]])


## randint #########################
np.random.randint(-5, 5, 5)
# -5~4までの整数のランダム値の1行5列の行列
# array([-5, -5,  1,  1,  3])

np.random.randint(-5, 5, (3, 3))
# -5~4までの整数のランダム値の3行3列の行列
# array([[-4, -1, -1],
#       [ 0, -2, -4],
#       [ 3,  1, -5]])

関連記事

Pythonの基本的なリファクタリングと条件分岐のリファクタリングについて基本的な内容
Pythonの基本的なリファクタリングと条件分岐のリファクタ…
元SEが語る、システムエンジニア(SE)の仕事の良いところって?将来性は?SEになるにはどうするのか
元SEが語る、システムエンジニア(SE)の仕事の良いところっ…
元SEが語る、システムエンジニア(SE)ってどんな仕事?きつくてつらいのか?
元SEが語る、システムエンジニア(SE)ってどんな仕事?きつ…
MacでDjango、Anaconda、VSCodeのインストールとDjangoを開発する環境の構築をする
MacでDjango、Anaconda、VSCodeのインス…
MacでFlask、Anaconda、VSCodeのインストールとFlaskを開発する環境の構築をする
MacでFlask、Anaconda、VSCodeのインスト…
【年収】フリーランスエンジニアの年収はいくらか??稼ぐための方法まとめ
【年収】フリーランスエンジニアの年収はいくらか??稼ぐための…

Primary Sidebar

人気記事

  • 1
    PyCharm,IntelliJのおすすめプラグイン一覧
  • no image 2
    Python未経験だが、フリーランスの案件に採用さ…
  • 3
    ITエンジニアとしてスキルを高めるためのUdemy講…
  • 4
    アメリカのシリコンバレーでプログラミングを無…

特集記事

  • 1
    Cursorの使用のポイントとコツ(コード補完、イ…
  • 2
    ITエンジニアとしてスキルを高めるためのUdemy講…

目次

1 numpyの簡単な作成方法、numpyからlistへの変換(np.array, np.arange, tolst)
2 0行列、1行列、単位行列(zeros, ones, eye)
3 分割して作成した配列の作成(linspace)
4 行列の形の変換(reshape)
5 行列のランダム値、正規分布(rand, randn, randint)
6 関連記事
StartCode ロゴ
AI時代のエンジニアを最速で育てる
法人向けIT研修で即戦力を育成しています。詳しくはお問い合わせください。
▶ 詳細はこちら
Linux講座
【Udemy】Linuxマスター!!基礎、シェルスクリプト、Docker基礎、ネットワーク 、セキュリティを体系的に解説
この講座は業務でLinuxを使用する必要がある初心者向けに設計されており、基本的なコマンド操作からシ...
詳細 ▶

Footer

利用規約