目次
こんにちは。sinyです。
この記事では、これまで著者がディープラーニングの学習をしていく中で、よく利用したり、便利だと思ったnumpyのメソッドについてまとめています。
随時更新してきます。
ゼロのarray要素を生成する。
自然言語処理でトークンベクトルの器を用意するときによく使います。
import numpy as np samples = 10000 maxlen = 100 embed_matrix = np.zeros((samples, maxlen)) print(embed_matrix.shape) (10000, 100)
リスト→array変換
これも、普通によく出てくるパターンですね。
a = [[1,2,3,4,5],[11,22,33,44,55]] print(type(a)) print(a) b = np.asarray(a) print(type(b)) print(b.shape) print(b) <class 'list'> [[1, 2, 3, 4, 5], [11, 22, 33, 44, 55]] <class 'numpy.ndarray'> (2, 5) [[ 1 2 3 4 5] [11 22 33 44 55]]
ループでarray要素を生成する。
ある要素数分アレイ配列を生成したい場合などに使えます。
a = np.array([[[0,1,2],[3,4,5]] for i in range(3)]) print(a) print(a.shape) [[[0 1 2] [3 4 5]] [[0 1 2] [3 4 5]] [[0 1 2] [3 4 5]]] (3, 2, 3)
arrayの結合
あるデータとあるデータを1つの配列に連結したい場合などに利用できます。
- axis=0:行方向に連結
- axis=1:列方向に連結
a = np.array([[0, 1], [2, 3]]) b = np.array([[4, 5], [6, 7]]) c = np.concatenate((a, b), axis=0) d = np.concatenate((a, b), axis=1) print(c) print(c.shape) print("=================") print(d) print("=================") print(d.shape) [[0 1] [2 3] [4 5] [6 7]] (4, 2) ================= [[0 1 4 5] [2 3 6 7]] ================= (2, 4)
配列をシャッフル
トークン辞書の数分だけの要素数のINDEXをランダムに生成する例
token = {"a":1, "b":2,"c":3,"d":4, "e":5, "f":6,"g":7, "h":8, "i":9,"j":10} a = np.array([i for i in range(len(token))]) np.random.shuffle(a) print(a) [2 6 3 9 5 1 0 7 4 8]
ランダムの並びのarray配列を生成
自然言語処理で、ベクトル化したアレイ配列からランダムな文章をINDEX指定で抽出するような場合に使えます。
indices = np.random.permutation(10) print(indices) [4 0 3 1 2 8 9 6 5 7]
基準となるArray配列から指定したINDEX番号に該当する要素を抽出
以下の例では、(3,3)のembed_matrixから、0行目と2行目の要素だけを抽出しています。
data = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0], [21.0, 22.0, 23.0]] embed_matrix = np.array(data) print(embed_matrix) print("=======================") vec = embed_matrix[[0,2]] print(vec) [[ 1. 2. 3.] [11. 12. 13.] [21. 22. 23.]] ======================= [[ 1. 2. 3.] [21. 22. 23.]]
ちょっとわかりづらいかもしれませんが、自然言語処理などで単語ベクトル全体のArrayから特定の単語ベクトルの情報だけを抽出したい時に利用できます。
例えば以下のような使い方をします。
- embed_matrixに200次元の日本語の単語ベクトル情報が格納されているとする。
※形状は(100000, 200)とする→(10万語の200次元単語ベクトルを表す) - ある日本語の文章の単語を単語辞書(INDEXと単語)を元にINDEX値に変換した結果以下のようなINDEX情報(リスト型)が得られたとする。
[11071,7,288,74,5176,21769,27,1392,10,1746,20,26,0,0,0] - 以下のようにリスト形式で行番号を渡すと、10万語分のベクトル情報が格納されているembed_matrixからリストで渡したINDEX行目のベクトル情報だけが抽出できる。
→ある文章を表すベクトル情報だけを抽出できます。 - embed_matrix[[11071,7,288,74,5176,21769,27,1392,10,1746,20,26,0,0,0]]