データ分析・初級問題チェック
問題 14 /40
NumPyに関する説明で、誤っているものはどれか。
選択 1
科学技術計算に特化したサードパーティ製のパッケージである。
選択 2
一つの配列に複数のデータ型を格納することができる。
選択 3
Pythonの標準リスト型に比べて、配列のデータを効率よく扱える。
選択 4
配列用のndarrayと、行列用のmatrixがある。
解説
選択肢2が正解です。
【選択肢1】
科学技術計算に特化したサードパーティ製のパッケージである。
正しい説明です。
【選択肢2】
一つの配列に複数のデータ型を格納することができる。
誤った説明です。
Numpyの配列の要素は一つのデータ型しか扱えません。例えば「np.array([1, 2.0])」のように、int型とfloat型を同じ配列で定義すると、「1」が「1.0」のfloat型に自動で変換され、「array([1., 2.])」となります。
データ型を一つに固定することで、処理が高速になります。Python標準のリストは一つの配列で複数のデータ型が扱えますが、その分、データ型などの情報が必要になりオーバーヘッドが大きくなります。
【選択肢3】
Pythonの標準リスト型に比べて、配列のデータを効率よく扱える。
正しい説明です。
Numpyは配列全体にわたる複雑な計算を、Pythonのforループを使わずに実現できます。
■ 100万個の整数に2を掛ける例
a = list(range(1000000))
b = np.arange(1000000)
Python標準のforループ
-------------------------------
c = []
for x in a:
c.append(x * 2)
-------------------------------
Numpy
-------------------------------
b * 2
-------------------------------
この実行速度を比較すると、Numpyのほうが100倍近く速いです。これが「効率よく扱える」一例となります。
【選択肢4】
配列用のndarrayと、行列用のmatrixがある。
正しい説明です。
選択肢2は配列の中の要素の話ですが、選択肢4はその要素を格納する箱の話です。Numpyで要素を格納する箱には、配列用のndarrayと、行列用のmatrixがあります。
■ 配列用
a = np.array([[1, 2], [3, 4]])
type(a)
▶︎ numpy.ndarray
■ 行列用
b = np.matrix([[1, 2], [3, 4]])
type(b)
▶︎ numpy.matrix
どちらも形状は2行2列ですが、matrixは行列として定義されています。例えば「*」演算子を使う場合、ndarrayの「a*a」は要素同士の積になりますが、matrixの「b*b」は行列の積になります。ndarrayで行列の積を計算する場合は「a@a」とします。要素同士の積と行列の積の違いは、上級問題18で解説します。
なお、公式書籍にmatrixを扱うコードは登場しません。
(公式書籍 p.92)