Python – 2-1.numpy –

2. ndarray

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
 

データ型の指定

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')

2021-07-29

Posted by tfurukaw