Help us understand the problem. What is going on with this article?

Numpyの使い方まとめ

pythonのnumpyについてのまとめ

はじめに

numpyで主に扱われるのがndarrayというデータ型で多次元の配列を扱うことができます。特徴としては高速に処理を行え、機械学習、深層学習、データサイエンスで利用されることが多いです。ndarrayはpythonのリストと似ており扱い方、例えばインデックス、スライスを用いた要素の扱いなど同じように操作することができます。

arrayの生成

import numpy as np

を前提に書いていきます

一次元配列の生成
a = np.array([0, 1, 2, 3])
print(a)
# 出力 [0 1 2 3]

arrayのアトリビュート(属性)

a = np.array([0, 1, 2, 3])

print(type(a))
#出力 <class 'numpy.ndarray'>

print(a.ndim) #次元数
#出力 1

print(a.shape) #各次元の要素数
#出力 (4,)

print(a.size) #サイズ
#出力 4

print(a.dtype) int64 #型
#出力

aという配列(array)には一次元(ndim)の4×1のデータで個数は4個です
dtypeは要素のデータ型のことです。

二次元配列の生成

今回二次元配列を生成する際に先ほどのdtypeを指定して作成してみます

b = np.array([[0, 1, 2, 3],[4,5,6,7]],dtype=np.float32)

print(b)
#出力
# [[0. 1. 2. 3.]
# [4. 5. 6. 7.]]

print(b.ndim)
#出力 2

print(b.shape)
#出力 (2,4)

print(b.size)
#出力 8

print(b.dtype)
#出力 float32

引数にdtypeを渡してあげることにより型を指定することができます

他の生成関数

arange(開始値、終了値(、ステップ))
a = np.arange(1, 10, 1)
print(a)
#出力[1 2 3 4 5 6 7 8 9]
linspace(開始値、終了値、個数) 等差数列
#個数に応じた感覚が自動的に算出される
a = np.linspace(1, 10, 4)
print(a)
#出力[ 1.  4.  7. 10.]

ones(要素数)
a = np.ones(4)
print(a)
#出力[1. 1. 1. 1.]
zeros(要素数)
a = np.zeros(4)
print(a)
#出力[0. 0. 0. 0.]
random.rand(要素数を複数渡して多次元の配列を生成可能)
print(np.random.rand())
#出力 0.30700645335514043

print(np.random.rand(3))
#出力 [0.74159644 0.54419175 0.35041095]

print(np.random.rand(3,2,4))
#出力 
# [[[0.32515581 0.48580963 0.67062081 0.21306281]
#   [0.92939764 0.22577412 0.26283789 0.77543546]]

#  [[0.74994208 0.06294482 0.37494771 0.16577029]
#   [0.6033194  0.11625464 0.49574886 0.05631945]]

#  [[0.83765773 0.48453536 0.88006351 0.17459801]
#   [0.23002602 0.22754166 0.20956698 0.87749178]]]

0から1までの乱数
最後の出力は3×2×4の配列

他にも正規分布、二項分布ベータ分布、ガンマ分布、カイ二乗分布の乱数などもある

arrayの扱い

インデックス

a = np.array([[0, 1, 2, 3], [4, 5, 6, 7], [1, 3, 4, 5]], dtype=np.int32)

print(a[0])
#出力[0 1 2 3]

print(a[:2])
#出力 
# [[0 1 2 3]
#  [4 5 6 7]]

print(a[:, 1])
#出力[1 5 3]

一つ目は配列aの一つめのリスト
二つ目は配列aの二番目までのリスト
三つ目は配列aの全てのリストの二番目の要素を取得
([0, 1, 2, 3]の二番目である1、[4, 5, 6, 7]の二番目である5、 [1, 3, 4, 5]の二番目である3を取得しているということ)

変換

reshape メソッドを用いると

a = np.ones(4)
print(a)
#出力 [1. 1. 1. 1.]

b = a.reshape(2, 2)
print(b)
#出力
# [[1. 1.]
#  [1. 1.]]

演算

a = np.ones(4)
print(a)
#出力[1. 1. 1. 1.]

print(a + 1)
#出力[2. 2. 2. 2.]

c = np.array([1, 2])
d = np.array([3,4])
print(c + d)
#出力[4 6]

形を合わせると計算ができる

ブロードキャスティング
a = np.ones(4).reshape(2, 2)
b = np.arange(1, 3)
print(a * b)
#出力
# [[1. 2.]
#  [1. 2.]]

ここで、配列aは2×2、配列bは2×1で形が合っていないがbの[1,2]を縦に並べることにより演算を行うことができます
これがブロードキャスティングと呼ばれるものです

要素の合計
a = np.arange(1, 10)
print(np.sum(a)) #出力 45

b = np.arange(9).reshape(3,3)
print(np.sum(b, axis=1) #出力 [ 3 12 21]

二番目の計算は軸ごとに計算している

arrayの連結
a = np.arange(9).reshape(3, 3)
b = np.arange(10, 19).reshape(3, 3)
print(np.hstack((a, b)))
#出力
# [[ 0  1  2 10 11 12]
#  [ 3  4  5 13 14 15]
#  [ 6  7  8 16 17 18]]

これは横方向の連結
縦方向の連結もある

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした