Python入門から応用までの学習サイト


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-types


ndarrayの主な属性には以下のようなものがあります。

# -*- 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



Pythonによるデータ分析入門
NumPy、pandasを
使ったデータ処理


ゼロから作るDeep Learning
Pythonで学ぶディープラーニング
の理論と実装


科学技術計算のための
Python入門


Pythonから
はじめる数学入門

 
 
 

配列同士の比較、計算!



確かな力が身につく
Python「超」入門




P  R