LoginSignup
0
2

More than 3 years have passed since last update.

Python基礎4 numpy メモ

Posted at

pythonの基礎を備忘録として残しておく

summary

array = np.array([[1, 2, 3],[4, 5, 6]])  # 配列作成
print(array)
print(array.shape)  # 行列数
print(array.ndim)  # 次元数
print(array.size)  # 要素数
print(array.reshape(3, 2))  # 3行2列に
print(array.reshape(-1, 3))  # 3列のみ指定し、行は自動(-1)で
print(array.flatten())  # 1次元に

print(np.arange(10))
print(np.arange(1, 10))
print(np.arange(1, 10, 2))

print(np.zeros(6))
print(np.zeros((2, 3)))  # 二重括弧に注意

print(array_1 + array_2)  # 各要素の足し算
print(np.append(array_1, array_2))  # 追加

print(array[0])  # 0行目
print(array[0][1])  # 0行1列目
print(array[0, 1])  # 0行1列目
print(array[:, 1])  # 全行1列目
print(array[-1, :]) # 最後の行全列

array = np.arange(9).reshape(3, 3)
print(array)
for i in array:  # 行の抽出
    print(i)
for i in array.flatten():  # 要素1つづつの抽出
    print(i)

print(array+10)  # ブロードキャスト
print(array*2)
print(array/2)

array_1 = np.arange(9).reshape(3, 3)
array_2 = np.arange(3).reshape(3, 1)
print(array_1 + array_2)  # ブロードキャスト

print(np.dot(array_1, array_2))  # 内積

print(np.sum(array, axis = 0))  # 行方向の足し算
print(np.sum(array, axis = 1))  # 列方向の足し算

numpyのインポート

import numpy as np

1. 配列

配列の基本操作

array = np.array([[1, 2, 3],[4, 5, 6]])  # 配列作成
print(array)
print(array.shape)  # 行列数
print(array.ndim)  # 次元数
print(array.size)  # 要素数
print(array.reshape(3, 2))  # 3行2列に
print(array.reshape(-1, 3))  # 3列のみ指定し、行は自動(-1)で
print(array.flatten())  # 1次元に

# 出力
[[1 2 3]
 [4 5 6]]
(2, 3)
2
6
[[1 2]
 [3 4]
 [5 6]]
[[1 2 3]
 [4 5 6]]
[1 2 3 4 5 6]

np.arange関数による配列作成

print(np.arange(10))
print(np.arange(1, 10))
print(np.arange(1, 10, 2))

# 出力
[0 1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]
[1 3 5 7 9]

np.zeros関数による配列作成

print(np.zeros(6))
print(np.zeros((2, 3)))

# 出力
[0. 0. 0. 0. 0. 0.]
[[0. 0. 0.]
 [0. 0. 0.]]

np.random.rand関数による配列作成。直前に、np.random.seed = *** 指定で再現性のある乱数を得る。

print(np.random.rand(3))
print(np.random.rand(2, 2))

# 出力
[0.17272856 0.47712631 0.51327601]
[[0.89263947 0.86838467]
 [0.33546726 0.56882862]]

要素の追加

array_1 = np.array([1, 2, 3])
array_2 = np.array([4, 5, 6])
print(array_1 + array_2)  # 足し算では各要素が足されるだけ
print(np.append(array_1, array_2))  # 追加はnp.append関数を使う

# 出力
[5 7 9]
[1 2 3 4 5 6]

要素の参照


array = np.arange(9).reshape(3, 3)
print(array)
print(array[0])  # 0行目
print(array[0][1])  # 0行1列目
print(array[0, 1])  # 0行1列目
print(array[:, 1])  # 全行1列目
print(array[-1, :]) # 最後の行全列

# 出力
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[0 1 2]
1
1
[1 4 7]
[6 7 8]

for 文での要素参照


array = np.arange(9).reshape(3, 3)
print(array)
for i in array:  # 行の抽出
    print(i)
for i in array.flatten():  # 要素1つづつの抽出
    print(i)

# 出力
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[0 1 2]
[3 4 5]
[6 7 8]
0
1
2
3
4
5
6
7
8

ブロードキャスト(配列、スカラー)

array = np.arange(9).reshape(3, 3)
print(array)
print(array+10)
print(array*2)
print(array/2)

# 出力
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[10 11 12]
 [13 14 15]
 [16 17 18]]
[[ 0  2  4]
 [ 6  8 10]
 [12 14 16]]
[[0.  0.5 1. ]  # 割り算を行うとFloat型になる
 [1.5 2.  2.5]
 [3.  3.5 4. ]]

ブロードキャスト(配列、配列)

array_1 = np.arange(9).reshape(3, 3)
array_2 = np.arange(3).reshape(3, 1)
print(array_1)
print(array_2)
print(array_1 + array_2)

# 出力
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[0]
 [1]
 [2]]
[[ 0  1  2]
 [ 4  5  6]
 [ 8  9 10]]

行列間の加減算

array_1 = np.arange(9).reshape(3, 3)
array_2 = np.arange(0, 90, 10).reshape(3, 3)
print(array_1)
print(array_2)
print(array_1 + array_2)

# 出力
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[ 0 10 20]
 [30 40 50]
 [60 70 80]]
[[ 0 11 22]
 [33 44 55]
 [66 77 88]]

行列の内積

array_1 = np.array([[0, 1],[2, 3]])
array_2 = np.array([[4, 5],[6, 7]])
print(array_1)
print(array_2)
print(np.dot(array_1, array_2))

# 出力
[[0 1]
 [2 3]]
[[4 5]
 [6 7]]
[[ 6  7]  # 0*4+1*6  0*5+1*7
 [26 31]] # 2*4+3*6  2*5+3*7

スクリーンショット 2019-08-15 21.53.40.png

行方向・列方向の処理

array = np.array([[0, 1, 2], [3, 4, 5]])
print(array)
print(np.sum(array))
print(np.sum(array, axis = 0))
print(np.sum(array, axis = 1))

# 出力
[[0 1 2]
 [3 4 5]]
15
[3 5 7]
[ 3 12]
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2