多次元配列したい(np.array
)
1# 1次元配列
2a = np.array([1, 2, 3])
3# => array([1, 2, 3])
4
5# 2次元配列
6a = np.array([
7 [1, 2, 3],
8 [4, 5, 6],
9 ])
10# => array([[1, 2, 3],
11# [4, 5, 6]])
12
13# 2次元配列(型を明示)
14a = np.array([
15 [1, 2, 3],
16 [4, 5, 6],
17 ],
18 dtype=np.float64)
19# => array([[1., 2., 3.],
20# [4., 5., 6.]])
np.array
でNumPy配列(numpy.ndarray
型)を作成できます。
dtype
オプションで要素の型を指定できます。
dtype
にはPython標準のビルトイン型(int
、float
、complex
、bool
、str
、bytes
、object
)が使えます。
精度を明示したい場合はNumPy型(np.int64
、np.float64
、np.complex128
など)を使います。
注釈
NumPyのベクトル演算を有効利用するためには、
NumPy配列の要素の型(dtype
)を揃えることが重要です。
異なる型を混在させると dtype=object
となり、
Pythonのリストと同じような動作になりますが、
演算速度は遅くなります。
型を混在させたい場合は、 素直にPythonのリストを使えばよいです。
リストから多次元配列したい
1# 1次元配列
2seq = [1, 2, 3, 4]
3a = np.array(seq)
4
5# 2次元配列
6seq = [[1, 2, 3], [4, 5, 6]]
7a = np.array(seq)
タプルから多次元配列したい
1# 1次元配列
2seq = (1, 2, 3, 4)
3a = np.array(seq)
4
5# 2次元配列
6seq = ((1, 2, 3), (4, 5, 6))
7a = np.array(seq)
辞書から多次元配列したい
1d = {"a": 1, "b": 2, "c": 3}
2
3# 値を変換
4a = np.array(list(d.values()))
5
6# キーを変換
7a = np.array(list(d.keys()), dtype=object)
8
9# キーと値を変換
10a = np.array(list(d.items()), dtype=object)
辞書型をnp.array
に渡しても意図した通りには動きません。
キーと値をどのように処理するかを明記する必要があります。
データフレームから多次元配列したい
1import pandas as pd
2import numpy as np
3
4d = {
5 "a": [1, 2, 3],
6 "b": [4, 5, 6],
7}
8df = pd.DataFrame(d)
9a = df.to_numpy()
10# ==> array([
11# [1, 4],
12# [2, 5],
13# [3, 6]
14# ])
pandas.DataFrame
が持っているto_numpy
メソッドで、
NumPy配列に変換できます。
列方向に定義したデータを、行方向のデータにできます。