2-1. numpy 初期化、基本的なデータ操作
import numpy as np
初期化
1次元リストを、0で初期化
nary = np.zeros(5)
==> array([0., 0., 0., 0., 0.])
1次元リストを、1で初期化(np.ones)
nary = np.ones(5)
==> array([1., 1., 1., 1., 1.])
1次元リストを、同じ任意の値で初期化(np.full)
nary = np.full(5, 999)
==> array([999, 999, 999, 999, 999])
※1つ目の引数が要素数。設定する値が2つ目
空の値で初期化(np.empty)
nary = np.empty(5)
==> array([0., 0., 0., 0., 0.])
※結果はその時々によって異なる。値が不定なので、後続処理で値を指定することが確実な時に使用すること
連番で初期化(np.arange)
nary = np.arange(6)
==> array([0, 1, 2, 3, 4, 5])
※"arrange"(整える)ではなく、"a"(Array)+"range()"なので注意
全て任意の値で初期化(np.array)
nary = np.array([[0,1,2], [4,6,8]])
==> array([[0, 1, 2],
[4, 6, 8]])
2次元配列はタプルで型指定。次元は行・列の順
nary1 = np.zeros((2,3))
==> array([[0., 0., 0.],
[0., 0., 0.]])
2次元リストを、任意の値で初期化
nary = np.full((2, 3), 999)
==> array([[999, 999, 999],
[999, 999, 999]])
0で初期化(np.zeros_like)
既存のndarrayの型に合わせる
nary = np.zeros_like(nary1)
==> array([[0., 0., 0.],
[0., 0., 0.]])
1で初期化(np.ones_like)
既存のndarrayの型に合わせる
nary = np.ones_like(nary1)
==> array([[1., 1., 1.],
[1., 1., 1.]])
任意の値で初期化(np.full_like)
既存のndarrayの型に合わせる
nary = np.full_like(nary1, 999)
==> array([[999., 999., 999.],
[999., 999., 999.]])
空の値で初期化(np.empty_like)
既存のndarrayの型に合わせる
nary = np.empty_like(nary1)
==> array([[0., 0., 0.],
[0., 0., 0.]])
※empty()と同じく、値が不定なので、後続処理で値を指定することが確実な時に使用すること
CSVファイルから読み込んで初期化(genfromtxt)
読込対象データ(CSV形式で保存しておく)
[sample.csv]
idx,col1,col2,col3
0,1,a,512
1,2,b,128
2,3,c,256
3,4,999,4
全カラム/データ型読込(文字列も読み込むので、dtype付となる)
nary = np.genfromtxt('sample.csv', delimiter=',', encoding='utf-8', names=True, dtype=None)
⇒ array([(0, 1, 'a', 512), (1, 2, 'b', 128), (2, 3, 'c', 256), (3, 4, '999', 4)],
dtype=[('idx', '<i4'), ('col1', '<i4'), ('col2', '<U3'), ('col3', '<i4')])
ヘッダ行をスキップして2次元で読込む。データ型(dtype)指定しないと文字列はNaNになる
nary = np.genfromtxt('sample.csv', delimiter=',', encoding='utf-8', skip_header=1)
⇒ array([[ 0., 1., nan, 512.],
[ 1., 2., nan, 128.],
[ 2., 3., nan, 256.],
[ 3., 4., 999., 4.]])
1列目と4列目のカラムのみ読込む。
nary = np.genfromtxt('sample.csv', delimiter=',', encoding='utf-8', usecols=[0,3], names=True, dtype=None)
⇒ array([(0, 512), (1, 128), (2, 256), (3, 4)],
dtype=[('idx', '<i4'), ('col3', '<i4')])
データ型、情報の取得
初期化
nary = np.ones((2,3))
配列情報
nary.shape
==> (2, 3)
nary.dtype
==> dtype('float64')
nary.ndim
==> 2
nary.size
==> 6
len(nary)
==> 2
データ型の指定
int型を指定する場合
nary = np.ones((2,3), dtype=int)
nary = np.ones((2,3), dtype='int')
==> array([[1, 1, 1],
[1, 1, 1]])
※intの場合は小数点の表示がない
object型(文字列等)を指定する場合
nary = np.ones((2,3), dtype=object)
==> array([[1, 1, 1],
[1, 1, 1]], dtype=object)
float型(浮動小数点)を指定する場合
nary = np.ones((2,3), dtype=float)
==> array([[1., 1., 1.],
[1., 1., 1.]])
データ型の変更(astype)
nary = nary.astype(np.int16)
==> array([[1, 1, 1],
[1, 1, 1]], dtype=int16)
nary = nary.astype(np.float)
==> array([[1., 1., 1.],
[1., 1., 1.]])
※floatはデフォルト値なので表示なし。
float型をunicode文字列に変換
nary = nary.astype(np.unicode)
==> array([['1.0', '1.0', '1.0'],
array([['1.0', '1.0', '1.0'],
※足し算してみると・・・1.01になる
nary[0,0] = nary[0,0] + '1'
array([['1.01', '1.0', '1.0'],
['1.0', '1.0', '1.0']], dtype='<U32')