ndarrayの基礎
独自の配列オブジェクトであるndarray(N-dimensional array)は、NumPyの効率的な数値解析を実現する最も基本的なクラスです。
ndarrayは次のような特徴を持ちます。
- 通常のPythonの配列とは異なり、同じ型の要素しか格納することができません。
- 作成時に固定のサイズを持ち、サイズが変更された場合は多くのケースで新しく作成し直されます。
- 同じ型かつ固定サイズであるため、汎用性の高いリストなどよりも大量のデータを効率的に処理することができます。
- インデックス値での取得やスライスを利用することができます。
- 各計算における有用なメソッドを持ちます。また多くの関数・メソッドの引数や戻り値で利用されます。
ndarrayは以下のような形で作成します。
# -*- coding: utf-8 -*- import numpy array_like = [[1, 10, 100], [2, 20, 200]] print '== array ==' print numpy.array(array_like) print '== zeros / zeros_like ==' print numpy.zeros([2, 3]) print '-------------------' print numpy.zeros_like(array_like) print '== ones / ones_like ==' print numpy.ones([2, 3]) print '-------------------' print numpy.ones_like(array_like)
--実行結果--
== array == [[ 1 10 100] [ 2 20 200]] == zeros / zeros_like == [[ 0. 0. 0.] [ 0. 0. 0.]] ------------------- [[0 0 0] [0 0 0]] == ones / ones_like == [[ 1. 1. 1.] [ 1. 1. 1.]] ------------------- [[1 1 1] [1 1 1]]
「numpy.array」は配列オブジェクトを指定してndarrayを作成します。この配列オブジェクトはndarrayであったり、タプルやリストなどのシーケンスです。「numpy.zeros」「numpy.ones」は配列の形状を指定して作成します。前者はその配列を0で、後者は1で初期化します。「numpy.zeros_like」「numpy.ones_like」は配列オブジェクトを指定し、その配列と同じ形状をもったndarrayを作成します。初期値は0(zeros_like)もしくは1(ones_like)です。
空のndarrayを作成する場合は「numpy.empty」「numpy.empty_like」を用います。要素がまったくないわけではなく、格納される値はランダムです。
# -*- coding: utf-8 -*- import numpy array_like = [[1, 10, 100], [2, 20, 200]] print '== empty / empty_like ==' print numpy.empty([2, 3]) print '-------------------' print numpy.empty_like(array_like)
--実行結果--
== empty / empty_like == [[ 2.41278729e-315 2.41277662e-315 2.50032616e-315] [ 9.44887463e-120 6.73793622e-120 1.92978148e-110]] ------------------- [[859254326 909326647 761606706] [ 3158577 0 0]]
標準のrangeのような形で作成する場合は「numpy.arange」を使用します。
# -*- coding: utf-8 -*- import numpy print numpy.arange(10) print numpy.arange(10, 20, 2)
--実行結果--
[0 1 2 3 4 5 6 7 8 9] [10 12 14 16 18]
データ型を指定して作成する場合は以下のようにします。
# -*- coding: utf-8 -*- import numpy array_like = [[1, 10, 100], [2, 20, 200]] print numpy.array(array_like, numpy.float32)
--実行結果--
[[ 1. 10. 100.] [ 2. 20. 200.]]
NumPyで指定可能なデータ型には次のようなものがあります。
# -*- coding: utf-8 -*- import numpy array_like = [[0, 1, 100]] print numpy.array(array_like, numpy.bool_) print numpy.array(array_like, numpy.int_) print numpy.array(array_like, numpy.intc) print numpy.array(array_like, numpy.intp) print numpy.array(array_like, numpy.int8) print numpy.array(array_like, numpy.int16) print numpy.array(array_like, numpy.int32) print numpy.array(array_like, numpy.int64) print numpy.array(array_like, numpy.uint8) print numpy.array(array_like, numpy.uint16) print numpy.array(array_like, numpy.uint32) print numpy.array(array_like, numpy.uint64) print numpy.array(array_like, numpy.float_) print numpy.array(array_like, numpy.float16) print numpy.array(array_like, numpy.float32) print numpy.array(array_like, numpy.float64) print numpy.array(array_like, numpy.complex_) print numpy.array(array_like, numpy.complex64) print numpy.array(array_like, numpy.complex128)
--実行結果--
[[False True True]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0. 1. 100.]] [[ 0. 1. 100.]] [[ 0. 1. 100.]] [[ 0. 1. 100.]] [[ 0.+0.j 1.+0.j 100.+0.j]] [[ 0.+0.j 1.+0.j 100.+0.j]] [[ 0.+0.j 1.+0.j 100.+0.j]]
各データ型の範囲等は下記リンクを参照してください。
https://docs.scipy.org/doc/numpy/user/basics.types.html#array-types-and-conversions-between-typesndarrayの主な属性には以下のようなものがあります。
# -*- coding: utf-8 -*-
import numpy
na = numpy.array([[1, 10, 100], [2, 20, 200]])
# データ型
print '== dtype =='
print na.dtype
# 全要素数
print '== size =='
print na.size
# 1要素あたりのバイト数
print '== itemsize =='
print na.itemsize
# 総バイト数
print '== nbytes =='
print na.nbytes
# 次元数
print '== ndim =='
print na.ndim
# 配列の形状
print '== shape =='
print na.shape
# 次元あたりの総バイト数とバイト数と1要素あたりのバイト数
print '== strides =='
print na.strides
# 実数・虚数(複素数)
print '== real / imag =='
print na.real
print na.imag
# 配列の1次元イテレータ
print '== flat =='
for i in na.flat:
print i
--実行結果--
== dtype == int32 == size == 6 == itemsize == 4 == nbytes == 24 == ndim == 2 == shape == (2L, 3L) == strides == (12L, 4L) == real / imag == [[ 1 10 100] [ 2 20 200]] [[0 0 0] [0 0 0]] == flat == 1 10 100 2 20 200
|
|
|
|
|
|
|
|
||
|
| |||
|
|
|
||
配列同士の比較、計算!
