はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Python】NumPyの配列について触ってみる

はじめに

最近Tensorflowを触り始めて、最初にNumpyの配列ってどんな奴なんだ?となりました。

私はPythonは超初心者なので変なことを書いているかもしれませんがあしからず。

では早速見ていきましょう。

numpy.ndarrayの概要

numpy.ndarray多次元配列を扱うクラスのことです。
docs.scipy.org

ただこれと結構似たコレクションとして標準の配列リストもあります。
Pythonのリストと配列とnumpy.ndarrayの違いと使い分け | note.nkmk.me

リストとnumpy.ndarrayは多次元配列を表現できるという似た性質をもちます。(配列は一次元のみ)

import numpy as np

# list
a = [[1, 2, 3], [4, 5]]
print(a)    # [[1, 2, 3], [4, 5]]

# numpy.ndarray
b = np.array([[1, 2, 3], [4, 5]])
print(b)    # [list([1, 2, 3]) list([4, 5])]

というわけで機械学習では多次元ベクトルがよく登場するので多次元配列ができない配列はNGというわけです。

加えてnumpy.ndarrayには以下の性質があるようです。

  • 同じ型しか格納できない
  • 数値計算のためのメソッド・関数が豊富で、高速な演算が可能

定義

実際にどのように定義されているか見てみましょう。

class numpy.ndarray(shape, dtype=float, buffer=None, offset=0, strides=None, order=None)
引数 型名 意味
shape tuple of ints ndarrayの形状(shape)をタプルで表したもの
dtype data-type ndarrayに含まれる要素が持つデータ型
buffer object exposing buffer interface バッファーとして読み込むオブジェクト
offset int バイト単位で、どこの地点からデータを読み込むか
strides tuple of ints 各次元方向に1つ隣の要素に移動するために必要なバイト数をタプルで表示したもの
order {‘C’, ‘F’}

基本はshapedtypeくらいを使う感じなんですかね。

使ってみる

import numpy as np

a = np.array([1, 2, 3])    # リスト
print(a)                   #  [1 2 3]
print(a[0])                # 1
b = np.array((4, 5, 6))    # タプル
print(b)                   # [4 5 6]
c = np.zeros(3)
print(c)                   # [0. 0. 0.]
d = np.array([[1, 2, 3], [4, 5, 6]])
print(d[0,1])              # 2

追記)よくよく見たら紹介したコンストラクタを使っていませんでしたね。後で追加します。

その他四則演算等は以下の記事が分かりやすかったです。
www.headboost.jp